(GeekBand)C++面向?qū)ο蟾呒壘幊蹋ㄏ拢┑诙芄P記

對象模型:關(guān)于vptr(虛指針)和vtbl(虛表)

<big>1. 類里面如果有一個或多個虛函數(shù),就會存在一個虛指針,虛指針指向一個虛表,虛表中為幾個或多個指針块请,指向類的虛函數(shù);

虛指針與虛表

  2. 繼承父類的函數(shù)只是繼承函數(shù)的調(diào)用權(quán)拳缠;
  3. 調(diào)用虛函數(shù)時先通過虛指針找到虛表墩新,通過虛表中相應(yīng)的指針調(diào)用相應(yīng)的函數(shù);
  4. 直接call一個函數(shù)地址來進(jìn)行調(diào)用為靜態(tài)綁定窟坐;
  5. 通過指針調(diào)用類的函數(shù)海渊、指針是向上轉(zhuǎn)型即指針為父類類型指針、函數(shù)為虛函數(shù)哲鸳。則調(diào)用為動態(tài)綁定p->vptr[n])(p)*臣疑。</big>

關(guān)于this指針

<big>1. 所有成員函數(shù)一定會有一個this作為函數(shù)的參數(shù),通過對象調(diào)用成員函數(shù)徙菠,函數(shù)中會自動加入一個當(dāng)前對象的指針this讯沈;

2. 所以派生類調(diào)用基類的函數(shù),函數(shù)中又調(diào)用了一個虛函數(shù)懒豹,由于是派生類的指針?biāo)蕴摵瘮?shù)就會通過this的虛表找到派生類相應(yīng)的函數(shù)實現(xiàn)芙盘;

this指針調(diào)用
</big>

關(guān)于Dynamic Binding

<big>靜態(tài)綁定在匯編語言中通過call相應(yīng)的函數(shù)指針,而動態(tài)綁定call后面不是一個固定的地址脸秽,而是通過指針找到相應(yīng)的虛指針在找到虛表儒老,通過虛表調(diào)用真正的目標(biāo)函數(shù);

const

<big>

1.函數(shù)const和成員const

  2. 函數(shù)后有或者沒有const是兩個不同的函數(shù)记餐,可以通過const實現(xiàn)函數(shù)重載驮樊;
  3. copy on write(COW):通過函數(shù)后面加或者不加const能夠?qū)崿F(xiàn)考慮COW
COW
</big>

New和Delete

<big>newdelete為表達(dá)式片酝,不能進(jìn)行重載囚衔。分解之為調(diào)用operator newoperator delete,這是可以被重載的雕沿,內(nèi)部是通過malloc()free實現(xiàn)的练湿。

operator new 和operator delete

1. 全局函數(shù)重載::
operator newoperator delete不是由使用著去調(diào)用的,這是由編譯器進(jìn)行調(diào)用审轮。operator new接受大小operator delete接受指針肥哎。影響層面廣泛。

全局重載

  2. 成員重載
  可以對有或者沒有[]進(jìn)行重載疾渣。
成員函數(shù)重載

實例,接口

1. 下圖為強(qiáng)制繞過自己對operator newoperator delete的重載,采用默認(rèn)全局的函數(shù)使用方法达椰。

globals與members

  2. operator new[]operator new重載時形參是不一樣的呈枉,不帶中括號的為內(nèi)存大小是size_t類型酥泞;帶中括號的形參為個數(shù),執(zhí)行后會調(diào)用這么多次構(gòu)造函數(shù)悯姊。

重載 new(),delete() (placement)

1. 重載之后可以new(......) class_ame這樣調(diào)用辉阶;其中第一參數(shù)必須為size_t垃僚。
  2. new的時候調(diào)用構(gòu)造函數(shù)罕袋,構(gòu)造失敗就會調(diào)用相應(yīng)的delete()溅固。

3. 標(biāo)準(zhǔn)庫實例

對于operator new和operator delete的理解

1. 由于operator new進(jìn)行重載是有很多不同的方法亮元,之間進(jìn)行區(qū)分的主要是參數(shù)個數(shù)和類型有很大的相關(guān)性,不能搞錯了。

2. operator newoperator delete作為成員函數(shù)重載時成肘,它是個靜態(tài)函數(shù)(static)批销。如果在調(diào)用的時候當(dāng)作普通的成員函數(shù)來調(diào)用就會報錯。

3. 對于operator delete:一般來說operator delete(void)的優(yōu)先級比operator delete(void,size_t)要高骡技,這意味著如果在同一空間(scope)定義了這兩種形式的delete鸣个,擁有單一參數(shù)者優(yōu)先被編譯器選擇(vs**測試)。

關(guān)于作業(yè)

1. 可以得出在堆區(qū)創(chuàng)建一個對象時布朦,首先是調(diào)用operator new分配足夠大的空間囤萤,再調(diào)用構(gòu)造函數(shù)創(chuàng)建一個對象,如果是派生類則先調(diào)用基類的構(gòu)造函數(shù)然后調(diào)用派生類的構(gòu)造函數(shù)是趴。在delete的時候先調(diào)用基類的構(gòu)造函數(shù)涛舍,在調(diào)用派生類的構(gòu)造函數(shù),最后通過operator delete釋放內(nèi)存唆途。

2. 關(guān)于virtual dtor虛析構(gòu)函數(shù)富雅,在本次作業(yè)中我嘗試過用父類的指針創(chuàng)建堆區(qū)子類對象。然后通過delete去釋放內(nèi)存肛搬,反向?qū)τ谧宇惖奈鰳?gòu)函數(shù)根本就沒有被調(diào)用没佑,而且operator delete也是用的全局的哪一個,并沒有使用Apple類重載的温赔,導(dǎo)致delete只是釋放掉了apple對象的基類成員所占的空間蛤奢,造成內(nèi)存泄漏。通過資料發(fā)現(xiàn)這是基類的析構(gòu)函數(shù)沒有加virtual的緣故。所以如果一個類要作為基類來使用啤贩,就必須使用虛析構(gòu)函數(shù)待秃。</big>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市痹屹,隨后出現(xiàn)的幾起案子章郁,更是在濱河造成了極大的恐慌,老刑警劉巖志衍,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暖庄,死亡現(xiàn)場離奇詭異,居然都是意外死亡楼肪,警方通過查閱死者的電腦和手機(jī)雄驹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淹辞,“玉大人医舆,你說我怎么就攤上這事∠笞海” “怎么了蔬将?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長央星。 經(jīng)常有香客問我霞怀,道長,這世上最難降的妖魔是什么莉给? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任毙石,我火速辦了婚禮,結(jié)果婚禮上颓遏,老公的妹妹穿的比我還像新娘徐矩。我一直安慰自己,他們只是感情好叁幢,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布滤灯。 她就那樣靜靜地躺著,像睡著了一般曼玩。 火紅的嫁衣襯著肌膚如雪鳞骤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天黍判,我揣著相機(jī)與錄音豫尽,去河邊找鬼。 笑死顷帖,一個胖子當(dāng)著我的面吹牛美旧,可吹牛的內(nèi)容都是我干的庭猩。 我是一名探鬼主播捶索,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谁榜,長吁一口氣:“原來是場噩夢啊……” “哼潘鲫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起录肯,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吊说,沒想到半個月后论咏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡颁井,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年厅贪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雅宾。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡养涮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眉抬,到底是詐尸還是另有隱情贯吓,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布蜀变,位于F島的核電站悄谐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏库北。R本人自食惡果不足惜爬舰,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寒瓦。 院中可真熱鬧情屹,春花似錦、人聲如沸杂腰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颈墅。三九已至蜡镶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恤筛,已是汗流浹背官还。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留毒坛,地道東北人望伦。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓林说,卻偏偏與公主長得像,于是被迫代替她去往敵國和親屯伞。 傳聞我的和親對象是個殘疾皇子腿箩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容