malloc / free和new / delete在C ++中的兼容性?
这里有一个比较好的malloc / free和new / delete,以及malloc()和free()如何在这里工作的很好的解释。 显然,我们不能混用它们 - 使用new或free来使用malloc。
我们可以看到许多开源项目,与许多贡献者一起使用这两种机制,同时尊重上述“不混合”规则。 Usualy,你在一个文件中只有一种方法(一个作者,一个偏好)。 我已经分叉了这样一个项目,并且使用新的/删除来添加一些功能。 但是我遇到了一些好奇的记忆腐败。 当然,我可能对他们负责,但.....
这让我想问一些“天真”的问题:
我可以在同一个编译单元(* .o)中同时使用malloc / free和new / delete两种机制 - 当然,尊重“不混合”规则?
我可以交错两种机制,就像在这个代码中一样?
int *a = (int *) malloc (1000 * sizeof int);
int *b = new int[1000];
// some code
free a;
delete[] b;
是的,你可以交错它们 - 只要使用一个与用于分配的函数匹配的解除分配函数。 只有使用错误的释放函数时才会出现此问题。
请注意,当你有几个库时 - 这些库可能会使用不同的堆,并不那么容易,所以即使你使用了一个正确的命名函数,它也可能碰巧在错误的模块中实现,因此使用错误的堆将会把你驱动到undefined行为。 看到这个答案可以更好地了解我在这里讨论的内容。
链接地址: http://www.djcxy.com/p/78537.html上一篇: malloc/free and new/delete compatibility in C++?
下一篇: What is the difference between "new" and "malloc" and "calloc" in C++?