new 和operator new

參考
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實際上就是指向一個已經分配好的內存緩衝區的的首地址。

發佈了23 篇原創文章 · 獲贊 15 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章