这里对 malloc/free 和 new/delete 进行了很好的比较,并很好地解释了 malloc() 和 free() 的工作原理。显然,我们不会将它们混合使用——将 free 与 new 或 delete 与 malloc 一起使用。
我们可以看到很多开源项目,有很多贡献者,使用这两种机制,同时尊重上述“禁止混合”规则。通常,您在一个文件中只有一种方式(一位作者,一种偏好)。我已经分叉了这样一个项目,并且正在使用 new/delete 添加一些功能。但是我遇到了一些奇怪的内存损坏。当然,我可能对他们负责,但是......
这让我问了一些“幼稚”的问题:
我可以在同一个编译单元 (*.o) 中同时拥有 malloc/free 和 new/delete 两种机制吗?当然,尊重“no-mix”规则?
我可以像在这段代码中那样交错这两种机制吗?
int *a = (int *) malloc (1000 * sizeof int); int *b = new int[1000]; // some code free a; delete[] b;