C++有几个函数可用于获取动态存储,其中大部分在某些基本方面略有不同。通常操作系统还会添加一些其他的函数。
由于其可移植性和相似性,其中有两个函数特别引人注目:malloc
和 ::operator new
。
全局的void* operator new(size_t, ::std::nothrow&)
和void* malloc(size_t)
这两个函数在标准和实现方面是否存在差异?
由于似乎有些混淆我所说的内容,请考虑以下两个调用:
void* p = ::std::malloc(10);
void* q = ::operator new(10, ::std::nothrow);
显而易见的区别是如何释放内存:
::std::free(p);
::operator delete(q);
注意:此问题不是例如new/delete和malloc/free之间的区别是什么?这样的重复问题,因为它涉及使用实际上不执行任何构造函数调用的全局operator new
。
::operator new
真是相当有趣。 - danielschemmelget_new_handler
。已修复。 - Fred Foomalloc
报告失败时返回空指针结果,operator new
通过异常报告失败。(5) 用户代码直接调用malloc
,而通常通过类似事务的new
表达式间接调用operator new
来进行分配和初始化。 - Cheers and hth. - Alfnew
。 - Fred Foo