GeekBand極客班C++面向?qū)ο蟾呒?jí)編程(下)第二周筆記

1.對(duì)象模型:關(guān)于vptr和vtbl

. 虛指針和虛表

. 類中對(duì)象如何占用內(nèi)存,和成員數(shù)據(jù)有關(guān)系,若B繼承了A,則B中包含A所有成員再加上自己

. 子類對(duì)象包含所有父類成分

. 存在繼承關(guān)系,一定會(huì)有虛指針

. 函數(shù)的繼承,是繼承的調(diào)用權(quán)而不是內(nèi)存大小

. 每一個(gè)虛函數(shù)在虛指針?biāo)赶蛱摫碇懈饔幸粋€(gè)自己的指針?biāo)赶?/p>

. 通過指針調(diào)用虛函數(shù)時(shí)候,不做靜態(tài)綁定.

. 虛函數(shù)的這種用法,叫做多態(tài)

2.對(duì)象模型:關(guān)于this

. 分析繼承體系時(shí),一定要很清楚this

. 通過對(duì)象調(diào)用函數(shù)時(shí),對(duì)象的指針就是this

. 使用虛函數(shù)時(shí)候,有兩種形式用法,多態(tài)和模版方法

. 在MFC庫中有很多這種栗子

. 通常父類會(huì)寫好各種功能,子類的對(duì)象調(diào)用父類的函數(shù)

. 面向?qū)ο笤谑褂锰摵瘮?shù)的過程

3.對(duì)象模型:關(guān)于dynamic binding

. 通過編譯碼來觀察靜態(tài)綁定

. 匯編碼動(dòng)態(tài)綁定的觀察

4.const

. 常量成員函數(shù),const放在函數(shù)小括號(hào)和花括號(hào)中間

. 成員函數(shù)不改變class data類數(shù)據(jù)

. 在對(duì)象調(diào)用常量或者非常量函數(shù)時(shí),對(duì)象有可能是const也可能不是const

. c++中很多規(guī)則都是基于其內(nèi)部原理

. const屬于signature的一部分

. 設(shè)計(jì)數(shù)據(jù)共享情況的時(shí)候一定要考慮各方改動(dòng)數(shù)據(jù)的影響,改動(dòng)前需先copy on write

. 如果調(diào)用中括號(hào)的是常量字符串,則不需要做copy on write,因?yàn)槌A孔址粫?huì)被修改

5.new delete

. new和delete在使用時(shí)都為表達(dá)式,這個(gè)行為不能改變,但其所調(diào)用函數(shù)可以重載

. new在底層調(diào)用malloc

6.重載operator new operator delete

. 在全局范圍重載,重載后的operator接管new和delete操作

. 重載在這里影響非常廣

. 也可以在class中對(duì)一個(gè)成員進(jìn)行重載

. 接口和前一致

. optional部分是可選的

. 重載后,接管內(nèi)存分配釋放

. 重載成員函數(shù)中帶[]的new和delete

. 進(jìn)行對(duì)一個(gè)數(shù)組的new和delete操作的接管

7.重載示例、接口

. 使用者在使用時(shí)候有可能會(huì)繞過成員中重載的new來調(diào)用全局的new

. 觀察執(zhí)行的結(jié)果

. 當(dāng)類中有虛函數(shù)時(shí),類中會(huì)多出一個(gè)虛指針

. 數(shù)組在創(chuàng)建時(shí),每個(gè)數(shù)據(jù)都要調(diào)用構(gòu)造函數(shù)一次

. array前會(huì)多一個(gè)counter

. 觀察使用在繞過成員重載使用全局new的情況

8.重載new()、delete()

. new可以有多個(gè)版本,每個(gè)版本placement含有其獨(dú)特的參數(shù)列

. 用小括號(hào)表現(xiàn)出來的額外參數(shù)來區(qū)分版本

. 第一個(gè)參數(shù)必須是size_t

. 也可以重載其相對(duì)應(yīng)的版本

. 將new()接管

. 觀察報(bào)錯(cuò)信息也是一個(gè)很好的學(xué)習(xí)過程


. 重載參數(shù)相對(duì)應(yīng)

. 被調(diào)用的時(shí)機(jī)是在分配內(nèi)存后調(diào)用構(gòu)造函數(shù)發(fā)出異常時(shí),有機(jī)會(huì)釋放之前分配異常的內(nèi)存

. 在異常發(fā)出后,如果沒有被處理,則會(huì)terminate

. 不同編譯器對(duì)其處理方法不一樣

9.標(biāo)準(zhǔn)庫中的一個(gè)栗子

basic_string使用new(extra)擴(kuò)充申請(qǐng)量

. reference counting的設(shè)計(jì)



...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容