总结:
operator new
三种形式(http://www.cplusplus.com/reference/new/operator%20new/)
throwing (1)
void* operator new (std::size_t size) throw (std::bad_alloc);
nothrow (2)
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw();
placement (3)
void* operator new (std::size_t size, void* ptr) throw();
placement new
placement new是重载operator new的一个标准、全局的版本,通常很少用到它。
placement new 原型void *operator new( size_t, void *p ) throw() { return p; }
operator new就像operator+一样,是可以重载的,但是不能在全局对原型为void operator new(size_t size)这个原型进行重载,一般只能在类中进行重载。
placement new**允许你在一个已经分配好的内存中(栈或堆中)构造一个新的对象
operator new重载的作用:
运用于调试,例如#define new new(__FILE__, __LINE__),这样我们可以输出文件名和行号
内存池优化,一次性分配一块大的内存作为内存池,重复利用该内存。
STL中的new,它将对象的空间分配和构造分离开来,给STL容器提供了更加灵活的接口
参考:
C++ 内存分配(new,operator new)详解
[C++]内存管理器--谈论如何自定义内存分配机制