Boolan C++面向?qū)ο蟾呒壘幊蹋ㄉ希?第二周筆記 暗影行者

C++面向?qū)ο蟾呒壘幊?/h1>

第二周結(jié)構(gòu)框圖:

7.三大函數(shù):拷貝構(gòu)造,拷貝賦值和析構(gòu)函數(shù)
8.堆,棧與內(nèi)存管理
9.復(fù)習(xí)String的實(shí)現(xiàn)過程
10.擴(kuò)展補(bǔ)充:類模板,函數(shù)模板及其他

7.三大函數(shù):拷貝構(gòu)造,拷貝賦值和析構(gòu)函數(shù):

String class:

默認(rèn)編譯器會(huì)給出一套拷貝構(gòu)造和拷貝賦值定義(這份特別標(biāo)準(zhǔn)),但帶指針的class編譯器給的不夠用,需自己定義,所以,只要class中帶指針,不能用編譯器默認(rèn)給的,依下圖講解拷貝構(gòu)造和拷貝賦值:
string-test.cpp

下面講解Big Three:

(筆記注釋都下在圖里面了)
筆記注釋都下在圖里面了

構(gòu)造函數(shù)與析構(gòu)函數(shù):

這里寫圖片描述
程序結(jié)束之前必須釋放動(dòng)態(tài)分配到的堆內(nèi)存(寫到析構(gòu)函數(shù)中)

堆棧內(nèi)存講解點(diǎn)我

這里寫圖片描述

拷貝構(gòu)造函數(shù):

這里寫圖片描述

拷貝賦值函數(shù):

(筆記在圖上)


這里寫圖片描述
注意要寫檢測自我賦值語句,如果不寫可能會(huì)導(dǎo)致下圖:
這里寫圖片描述
如果沒寫檢測自我賦值語句,可能會(huì)出錯(cuò)!
侯捷老師總結(jié):寫檢測自我賦值語句不止為了效率高,而且是為了防止出錯(cuò)!

8.堆,棧與內(nèi)存管理:

output函數(shù):

這里寫圖片描述
cout這種東西本來就可以接收字符串的地址以打印出字符串

所謂堆棧:

這里寫圖片描述

堆對象的生命期

這里寫圖片描述
 注意:new先分配memory,再調(diào)用ctor
      delete:先調(diào)用dtor,在釋放memory

動(dòng)態(tài)分配所得的內(nèi)存塊,in VC:

這里寫圖片描述
   調(diào)試模式下,多出來的內(nèi)存是一種必要的浪費(fèi),因?yàn)橐院蠡厥諘r(shí)需要靠某些東西順利回收。
   上下cookie最重要的作用是記錄整塊給你的大小(以便回收時(shí)讓編譯器知道要回收的大小)

array new一定要搭配array delete

這里寫圖片描述
要使用array delete否則會(huì)出現(xiàn)內(nèi)存泄漏

10.擴(kuò)展補(bǔ)充:類模板,函數(shù)模板及其他

進(jìn)一步補(bǔ)充:static

這里寫圖片描述
 1.調(diào)用相同的函數(shù),傳給他們不同的地址,這樣才有機(jī)會(huì)去處理不同的數(shù)據(jù)。
 2.靜態(tài)函數(shù)沒有this pointer
 3.靜態(tài)函數(shù)只能處理靜態(tài)數(shù)據(jù)。
 4.class中的靜態(tài)數(shù)據(jù)一定要在class外面寫上定義!!!
 5.調(diào)用static函數(shù)的方式有二:
   a.通過object調(diào)用
   b.通過class name調(diào)用

class templete 類模板:

類模板會(huì)造成代碼必要的膨脹

革命尚未成功,同志仍需努力!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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