new
/delete
和malloc
/free
有什么区别?
相关(重复?):In what cases do I use malloc vs new?
最佳答案
新建
/删除
new
(标准版本)从不返回 NULL
(将抛出失败)。malloc
/free
是实现定义的。std::set_new_handler
)。operator new
/operator delete
可以合法覆盖。malloc
/免费
void*
。NULL
。new
/delete
。malloc
/free
可以不合法地被覆盖。功能 | 新建 /删除 |
malloc /免费 |
---|---|---|
分配的内存 | '免费商店' | '堆' |
返回 | 全类型指针 | void* |
失败时 | 抛出(从不返回 NULL ) |
返回 NULL |
所需尺寸 | 编译器计算 | 必须以字节为单位指定 |
处理数组 | 有明确的版本 | 需要手动计算 |
重新分配 | 没有直观处理 | 简单(无复制构造函数) |
反向调用 | 定义的实现 | 没有 |
内存不足的情况 | 可以添加新的内存分配器 | 用户代码未处理 |
可覆盖 | 是的 | 没有 |
构造函数/析构函数的使用 | 是的 | 没有 |
从技术上讲,new
分配的内存来自“Free Store”,而malloc
分配的内存来自“Heap”。这两个区域是否相同是一个实现细节,这也是 malloc
和 new
不能混用的另一个原因。
https://stackoverflow.com/questions/240212/