让我们从placement new回来片刻,看看new操作符(new operator)与operator new的关系,你想在堆上建立一个对象,应该用new操作符。它既分配内存又为对象调用构造函数。如果你仅仅想分配内存,就应该调用operator new函数;它不会调用构造函数。如果你想定制自己的在堆对象被建立时的内存分配过程,你应该写你自己的operator new函数,然后使用new操作符,new操作符会调用你定制的operator new.如果你想在一块已经获得指针的内存里建立一个对象,应该用placement new.
在C++里面当调用
A * a = new A();
分两部做:
第一部:
调用oprator new(size_t size)函数分配内存。
调用构造函数A()
至于oprator new(size_t size)
编译器会看A有没有重写该函数,如果没有重写,就调用全局的operator new()函数。
所以,要想改变由系统自动在堆栈上给对象分配内存,自己控制分配内存的算法。就要重写该operator new()函数。