new:
new operator,不能被重载,行为总是一致的。它先调用operator new分配内存,然后调用构造函数初始化那段内存。
operator new:
可以重载,但是不能在全局对原型为void operator new(size_t size)这个原型进行重载,一般只能在类中进行重载。如果类中没有重载operator new,那么调用的就是全局的::operator new来完成堆的分配。
placement new :
void* operator new (std::size_t size, void* ptr) throw();
括号里的参数ptr是一个指针,它指向一个内存缓冲器,placement new将在这个缓冲器上分配一个对象。
placement new主要适用于:在对时间要求非常高的应用程序中,因为这些程序分配的时间是确定的;长时间运行而不被打断的程序;以及执行一个垃圾收集器 (garbage collector)。
operator new重载的一个版本,它是没有申请内存的,只是调用了构造函数。返回一个指向已经分配好的内存的一个指针,所以对象销毁的时候不需要调用delete释放空间,但必须调用析构函数销毁对象。
new 操作符的执行过程
(1). 调用operator new分配内存 ;
(2). 调用构造函数生成类对象;
(3). 返回相应指针。