我在C++中看到有多种方式来分配和释放数据,我知道当你打电话给malloc你时应该打电话free,当你使用new操作员时你应该配对,delete将两者混合是错误的(例如,调用free()创建的东西)与new操作员),但我不知道何时应该使用malloc/ free何时应该在我的真实世界程序中使用new/ delete.
malloc
free
new
delete
free()
如果您是C++专家,请告诉我您在此方面遵循的任何经验法则或惯例.
c++ malloc memory-management new-operator
是在内部::operator new(size_t)调用malloc(),还是直接使用系统调用/特定于操作系统的库调用?C++标准说什么?
::operator new(size_t)
malloc()
在这个答案中它说:
malloc()保证返回与任何标准类型对齐的地址.::operator new(n)只保证返回一个不大于任何标准类型的地址n,如果T不是一个字符类型,那么new T[n]只需要返回一个对齐的地址T.
::operator new(n)
n
T
T[n]
这表明new()不需要打电话malloc().
new()
注意:这里有一个SO 问题有关的一切operator new做其他比分配.
operator new
c++ malloc new-operator dynamic-memory-allocation
c++ ×2
malloc ×2
new-operator ×2
dynamic-memory-allocation ×1
memory-management ×1