【发布时间】:2013-10-03 08:59:34
【问题描述】:
对 malloc/free 和 new/delete here 进行了很好的比较,并很好地解释了 malloc() 和 free() 如何工作 here。显然,我们不会将它们混合使用——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;
【问题讨论】:
-
是的,但您甚至不应该在自己的代码中使用
new或malloc;请改用unique_ptr或shared_ptr之类的智能指针。 -
我认为这是合法的。
-
您是否确保永远不会为具有构造函数或析构函数的类型调用
malloc()和free()?这些调用不会执行您的类的构造函数和析构函数,因此可能会导致问题。
标签: c++ malloc new-operator free delete-operator