【发布时间】:2014-06-09 21:23:52
【问题描述】:
C++ 有几个获取动态存储的函数,其中大部分在某些基本方面有所不同。操作系统通常会添加更多。
其中两个因其可移植性和相似性而受到特别关注:malloc 和 ::operator new。
全局 void* operator new(size_t, ::std::nothrow&) 和 void* malloc(size_t) 之间是否有任何区别(w.r.t. 标准和实现)?
由于我所说的似乎有些混乱,请考虑以下两个调用:
void* p = ::std::malloc(10);
void* q = ::operator new(10, ::std::nothrow);
明显和微不足道的区别是如何释放内存:
::std::free(p);
::operator delete(q);
注意:这个问题不是重复的,例如What is the difference between new/delete and malloc/free? 因为它谈到了使用 global operator new 实际上不执行任何 ctor 调用。
【问题讨论】:
标签: c++ c++11 memory-management malloc new-operator