Typecasting malloc C ++

Typecasting malloc C++

本问题已经有最佳答案,请猛点这里访问。

我有一些C代码,其中有Maloc语句,我想与一些C++代码合并。

我想知道何时和为什么在C++中键入一个调用MALOC的命令?

例如:

1
char *str = (char*)malloc(strlen(argv[1]) * sizeof(char));


when and why is typecasting a call to malloc neccessary in C++?

总是在不分配给EDCOX1×0的条件下,因为EDCOX1×0 }不隐式地转换为其他指针类型,它在C.中的方式,但真正的答案是,首先不应该在C++中使用EDCOX1 2。

我不是建议你用new代替malloc。现代C++代码应该尽量少使用EDCOX1 3,或者如果可能的话完全避免使用。您应该隐藏所有使用new或使用非原始类型(如xeo提到的std::vector)。由于我经验有限,我不太有资格在这个方向提出建议,但是这篇文章以及寻找"C++避免新"应该有所帮助。然后你会想看看:

  • STD::产生器
  • 智能指针


编译C库。编译你的C++库。让他们在任何使用他们的"主"程序中都能表现得很好。要点是,如果你维护一个混合代码库,你可能想从C++的东西中分离出纯C的东西。否则,C的东西变成C++的东西,看起来像C.。


如果您可以更改该代码,那么最好使用new,这样看起来会像这样

char* str = new char;

这意味着您不需要像C方式那样执行任何强制转换,也不需要指定所需的内存大小。此外,如果这是一个像EDCOX1,25个对象这样的对象,那么当使用EDCOX1(2)时,您将不会调用构造函数,这仅仅保留了与指针EDCOX1 27所用的内存,所以最好总是使用EDCOX1,3,C++,如果您还可以在使用内存时总是使用适当的方式,如果EDCOX1为3,则EDCOX1为16。d如果你是malloc你是free。如果您在以前是new的内存上使用free,那么就不会调用该对象析构函数。


首先,在几乎所有的情况下,在C++程序中不要使用EDCOX1 2,而是更喜欢EDCOX1×3,因为它将确保在需要时调用构造函数,等等。

但是,如果出于遗留的原因,您试图避免尽可能多的重写-您需要强制执行任何未分配给void*指针的malloc调用。


EDCOX1,2,总是返回EDCOX1,9,所以你需要抛出所有东西(因为C++比C有更强的类型检查,而不是自动的)

当我使用C时,为了代码的清晰性,我还对所有内容进行了强制转换。

此外,在C++中,可以随时使用EDCOX1 10,这是有充分理由的。

将所有C代码转换为C++,通过将每一个malloc()字重写为新代码,很容易在代码中引入大量错误,除非您有时间继续阅读正在合并的代码,以找到EDCOX1、10、EDCOX1、13、EDCX1、14等的每一个实例。关于它。

不要把malloc()deletenewfree()混在一起,否则东西会坏的。