Typecasting malloc C++
我有一些C代码,其中有Maloc语句,我想与一些C++代码合并。
我想知道何时和为什么在C++中键入一个调用MALOC的命令?
例如:
1
| char *str = (char*)malloc(strlen(argv[1]) * sizeof(char)); |
- stackoverflow.com/questions/15018011/building-a-mixed-c-c-co‌&8203;de/…
- 我已经看到这个问题了,但是它没有回答为什么C++是必要的。
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::vector和朋友)。
- 为什么在C++中使用MALOC这么差?这本来是一个纯粹的C程序,直到我需要合并一些C++代码。把所有这些malloc转换成new是一件麻烦的事。
- 这很糟糕,因为它不构造对象。也因为它分享了new所拥有的每一个坏处,这些坏处很多。
- @Xeo,Deadmg,你可能更适合解释人们应该如何避免new。
- @一些人会反对你,但我同意。请参阅此处的问题
编译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()和delete或new和free()混在一起,否则东西会坏的。
- 我的方法不是使用malloc
- "当我使用C时,为了代码的清晰性,我还投射了所有的内容。"—实际上,你投射它是为了模糊性。在C中强制转换malloc()的返回值是错误的。
- @好吧,关于new部分…真正好的C++不使用EDCOX1和2
- 我这么多年来一直这样做,从我以前学过C++,因为认真地,不是铸造,看看你是否得到只是愚蠢。除非你有疯狂的类型名,否则你的代码不会更长。
- @但快艇,快点,石膏是丑陋和多余的。我宁愿读《江户记》1(8),也不愿读《江户记》1(9)。
- int *ptr = (int *)malloc(sizeof(int));可能看起来是多余的,但是如果以avarboPlex = malloc(MAXSIZEOFBO);结尾呢?
- 这就是你应该把语言转换成C++的标志