new
/delete
和malloc
/free
有什么区别?
最佳答案
new
/delete
- 分配/释放内存
- 从“免费商店”分配的内存。
- 返回一个完全类型化的指针。
-
new
(标准版)从不返回NULL
(将抛出失败)。 - 使用 Type-ID 调用(编译器计算大小)。
- 有明确处理数组的版本。
- 重新分配(以获得更多空间)没有直观地处理(因为复制构造函数)。
- 他们是否调用
malloc
/free
是否定义了实现。 - 可以添加一个新的内存分配器来处理低内存(
std::set_new_handler
)。 -
operator new
/operator delete
可以合法地覆盖。 - 用于初始化/销毁对象的构造函数/析构函数。
malloc
/free
- 分配/释放内存
- 从“堆”分配的内存。
- 返回
void*
. - 返回
NULL
失败时。 - 必须以字节为单位指定所需的大小。
- 分配数组需要手动计算空间。
- 重新分配更大的内存块很简单(无需担心复制构造函数)。
- 他们不会调用
new
/delete
. - 无法将用户代码拼接到分配序列中以帮助解决低内存问题。
-
malloc
/free
不能不被合法覆盖。
功能表比较:
new
/delete
malloc
/free
void*
NULL
)NULL
从技术上讲,内存由 new
分配来自“免费商店”,而内存由 malloc
分配来自“堆”。这两个区域是否相同是一个实现细节,这是malloc
的另一个原因。和 new
不能混用。
关于c++ - new/delete 和 malloc/free 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7495168/