<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

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

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

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

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

    評(píng)論

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

    這塊的知識(shí)好零碎啊!謝謝你總結(jié)的這么清楚這么詳細(xì)!期待你的下篇文章!
    2008-07-14 21:43 | pig
    主站蜘蛛池模板: 亚洲中文字幕无码专区| 我想看一级毛片免费的| 一本色道久久88综合亚洲精品高清| 亚洲香蕉在线观看| 午夜影视在线免费观看| 亚洲人成在久久综合网站| 中文字幕成人免费视频| 亚洲av色影在线| 久久精品国产这里是免费| 亚洲精品蜜桃久久久久久| 三级网站在线免费观看| 亚洲成av人片天堂网| a级毛片高清免费视频| 亚洲AV午夜福利精品一区二区| 可以免费观看的毛片| 久久精品a亚洲国产v高清不卡| h片在线免费观看| 亚洲小说图区综合在线| 国产免费黄色大片| 一级毛片免费在线观看网站| 亚洲中文字幕无码一区| 久久国产精品免费专区| 久久亚洲AV成人无码软件| 日韩在线免费视频| 亚洲爆乳无码专区www| 亚洲精品国产日韩无码AV永久免费网| 国产免费A∨在线播放| 亚洲日本在线观看| 成人五级毛片免费播放| 免费毛片毛片网址| 亚洲国产精品久久66| 成人免费一区二区三区在线观看| 久久精品国产亚洲av品善| 久久亚洲高清综合| 97在线视频免费| 欧洲亚洲综合一区二区三区| 亚洲区小说区图片区QVOD| 91手机看片国产永久免费| 日韩亚洲人成网站| 亚洲视频在线观看网站| 国产性生交xxxxx免费|