so true

          心懷未來,開創(chuàng)未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
          數(shù)據(jù)加載中……

          operator new和operator delete學(xué)習(xí)總結(jié)

          operator new和operator delete學(xué)習(xí)總結(jié)
          這塊內(nèi)容很多很多,那就撿幾個重要的地方說說吧,主要目的是為了在遺忘的時候給自己提個醒,呵呵。
          1。new和delete的重載函數(shù)都是static函數(shù),你可以在聲明的時候?qū)懮先ィ部梢圆粚懀ň幾g器自動為你添加),但是事實是無法更改的,它們都是static的。
          2。new和delete必須形式上配對,且里面做的內(nèi)容也要配對
          void* operator new(size_t size, const char*, int);//調(diào)用形式為new("wokao",34) ;
          void operator delete(void *p, const char*, int);//這個delete與上面的那個new配對
          void operator delete(void *p, size_t, const char*, int)//這個delete與上面的那個new不配對
          3。new和delete的標準形式是:
          void* operator new(size_t size);
          void operator delete(void* p);
          或void operator delete(void* p,size_t size);//這個delete可以驗證if( sizeof(X)!=size )
          4。new可以被重載出其他的樣式來;而delete重載時,如果有其他樣式出現(xiàn),那是為了配合new的新樣式,與此同時也必須得有標準的delete樣式,因為我們最后delete *p的時候調(diào)用的是標準的delete樣式,而那個非標準的只是為了在構(gòu)造函數(shù)拋出異常時讓系統(tǒng)調(diào)用與新樣式的new配套的新樣式的delete。
          5。只有基類的析構(gòu)函數(shù)被聲明為virtual時(如果你沒有在基類中寫析構(gòu)函數(shù)而是利用默認的或者即便寫了卻忘了加virtual都是不可以的),才可以通過基類的指針(實則指向子類)來delete,達到調(diào)用子類delete的目的。
          6。不論你重載不重載,本質(zhì)上new都是調(diào)用::operator new(size)這個全局函數(shù)來分配恰當(dāng)?shù)膬?nèi)存空間,可以在調(diào)用new之前通過set_new_handler函數(shù)來設(shè)置配置內(nèi)存失敗的回調(diào)函數(shù)。
          7。new重載函數(shù)中的size至少是1,即便類沒有任何成員變量。
          8。new的順序:new->基類的構(gòu)造函數(shù)(在進入基類構(gòu)造函數(shù)之前當(dāng)然需要先根據(jù)初始化列表來初始化基類的部分成員變量)->子類的構(gòu)造函數(shù)(在進入基類構(gòu)造函數(shù)之前當(dāng)然需要先根據(jù)初始化列表來初始化基類的部分成員變量)
          9。delete的順序:子類的析構(gòu)函數(shù)->基類的析構(gòu)函數(shù)->delete
          10。重載new運算符時最好要讓標準的new的調(diào)用形式露出來
          void* operator new(size_t size,char*);void* operator new(size_t size);
          或void* operator new(size_t size,char* =NULL);
          11。寫一個new,就最好寫一個與之配套的delete。
          12。對于new[]和delete[]的重載,也完全沒啥區(qū)別,就是換了個名稱,除此之外,再無其他特別之處了。

          posted on 2008-07-13 19:58 so true 閱讀(2678) 評論(1)  編輯  收藏 所屬分類: C&C++

          評論

          # re: operator new和operator delete學(xué)習(xí)總結(jié)  回復(fù)  更多評論   

          這塊的知識好零碎啊!謝謝你總結(jié)的這么清楚這么詳細!期待你的下篇文章!
          2008-07-14 21:43 | pig
          主站蜘蛛池模板: 沙洋县| 莱芜市| 山东省| 那曲县| 兴山县| 东光县| 雷波县| 金秀| 榆社县| 枞阳县| 荥经县| 航空| 孝义市| 东乡县| 绥棱县| 郑州市| 宁乡县| 沅江市| 察雅县| 西华县| 昆明市| 河源市| 凤城市| 峨边| 枝江市| 荃湾区| 南昌市| 牡丹江市| 河曲县| 蓬溪县| 新巴尔虎左旗| 沛县| 昌宁县| 五峰| 绍兴市| 宁陵县| 南充市| 石渠县| 汉阴县| 红河县| 梓潼县|