參考
1、http://blog.csdn.net/wudaijun/article/details/9273339
2、http://www.cnblogs.com/luxiaoxun/archive/2012/08/10/2631812.html
new 、operator new 和
placement new <—-> new( (void*)pBuf) ClassObj(obj)
區別
(1)new :不能被重載,其行爲總是一致的。它先調用operator new分配內存,然後調用構造函數初始化那段內存。
new 操作符的執行過程:
1. 調用operator new分配內存 ;
2. 調用構造函數生成類對象;
3. 返回相應指針。
(2)operator new:要實現不同的內存分配行爲,應該重載operator new,而不是new。
operator new就像operator + 一樣,是可以重載的。如果類中沒有重載operator new,那麼調用的就是全局的::operator new來完成堆的分配。同理,operator new[]、operator delete、operator delete[]也是可以重載的。
(3)placement new:只是operator new重載的一個版本。它並不分配內存,只是返回指向已經分配好的某段內存的一個指針。因此不能刪除它,但需要調用對象的析構函數。
如果你想在已經分配的內存中創建一個對象,使用new是行不通的。也就是說placement new允許你在一個已經分配好的內存中(棧或者堆中)構造一個新的對象。原型中void* pBuf實際上就是指向一個已經分配好的內存緩衝區的的首地址。