GeekBand C++面向?qū)ο蟾呒?jí)編程(上)第二周學(xué)習(xí)筆記

課堂筆記:

三個(gè)特殊函數(shù):

String(const String& str);//拷貝構(gòu)造函數(shù)

String& operator=(const String& str);//拷貝賦值函數(shù)

~String()檩赢;//析構(gòu)函數(shù)

在內(nèi)外調(diào)用析構(gòu)函數(shù)時(shí)痴腌,需要寫全名黍翎;

析構(gòu)函數(shù)起到關(guān)門清理函數(shù)的作用;

如果沒(méi)有把內(nèi)存釋放掉的話蜡秽,內(nèi)存就會(huì)溢出

如果class里有指針,多半是要進(jìn)行動(dòng)態(tài)分配

動(dòng)態(tài)創(chuàng)建對(duì)象的方式:

string *p = new String("Hello");

delete p;

String s2(s1);//以s1為藍(lán)本創(chuàng)建對(duì)象s2

m_data = new char [ strlen(str.m_data)+1];

strcpy(m_data,str.m_data);//深拷貝

創(chuàng)造足夠的空間給藍(lán)本

拷貝賦值函數(shù):

if(this == &str)

return *this;//檢測(cè)自我賦值

output函數(shù):

不能寫成成員函數(shù),寫成全局函數(shù)掩宜,有兩個(gè)參數(shù)

ostream& operator<<( ostream& os, const String& str );

stack(棧):是存在于某種作用域的一塊內(nèi)存空間。當(dāng)調(diào)用函數(shù)么翰,函數(shù)本身會(huì)形成一個(gè)stack用來(lái)放置它所接收的參數(shù)以及返回地址牺汤。在函數(shù)本體內(nèi)聲明的任何變量,其所使用的內(nèi)存塊都取自上述stack浩嫌。只要離開(kāi)作用域檐迟,其生命周期結(jié)束,自動(dòng)調(diào)用析構(gòu)函數(shù)码耐。

{

Complex c1(1,2)追迟;

}

heap(堆):由操作系統(tǒng)提供的一塊全局內(nèi)存空間,程序可動(dòng)態(tài)分配從中獲得若干塊骚腥。

{

Complex *p = new Complex(3);

}

要手動(dòng)delete

可以在任何地方以new的方式敦间,動(dòng)態(tài)的獲得

static object,其生命在作用域結(jié)束之后仍然存在,直到程序結(jié)束

static_cast 類型轉(zhuǎn)換

array new 一定要搭配 array delete

static:

只能處理靜態(tài)的數(shù)據(jù)

調(diào)用方式:1.通過(guò)object調(diào)用廓块;2.通過(guò)class name調(diào)用


對(duì)operator = 中處理“自我賦值”進(jìn)行深入學(xué)習(xí):

例如下列代碼:

class Comolex { . . . };

Conplex x;

. . .

x = x;//自己賦值給自己

這樣看起來(lái)可能有點(diǎn)笨厢绝,但是編譯是能通過(guò)的,此外賦值動(dòng)作不是總是一眼就能被辨識(shí)出來(lái):

a[i] = a[j] ; ? ? //自我賦值

如果i和j有相同的值带猴,這就是個(gè)自我賦值昔汉。

*px = *py; ? ?//這也是自我賦值

如果px和py恰巧指向同一個(gè)東西拴清,這也是自我賦值靶病。這些自我賦值并不明顯,但都是因?yàn)椤皠e名”帶來(lái)的結(jié)果口予。一班來(lái)說(shuō)嫡秕,如果某段代碼操作pointers 或者 references 而它們被用來(lái)指向多個(gè)相同的類型的對(duì)象,就需要考慮這些對(duì)象是否是同一個(gè)苹威。只要兩個(gè)對(duì)象來(lái)自同一個(gè)繼承體系昆咽,它們不需要進(jìn)行聲明成相同的類型就能造成“別名”的現(xiàn)象,這是因?yàn)檠栏Γ粋€(gè)基類的引用或指針可以指向一個(gè)派生類對(duì)象:

class Base ?{ . . . ?} 掷酗;

clase Derived : public Base { . . .? } ;

void complex (const Base& x, Derived* y); ? ? //x和y有肯能其實(shí)是同一對(duì)象

下面是operator=實(shí)現(xiàn)代碼窟哺,雖然表面上看起來(lái)合理泻轰,但是自我賦值出現(xiàn)時(shí)并不安全:

Widget& Widget::operator= ( const Widget& p)

{

delete q;

q = new Base(*p.q);

return *this;

}

這里的自我賦值的問(wèn)題是,operator=函數(shù)內(nèi)的*this和p有可能是同一個(gè)對(duì)象且轨。在函數(shù)末尾浮声,Widget中,它原本不該被自我賦值的動(dòng)作改變的旋奢,因?yàn)榘l(fā)現(xiàn)自己有一個(gè)指針指向一個(gè)已經(jīng)被刪除的對(duì)象泳挥。

為了阻止這種自我賦值的錯(cuò)誤,一般做法是operator=函數(shù)加一個(gè)“證同測(cè)試”至朗,來(lái)達(dá)到“自我賦值”的檢驗(yàn)?zāi)康模?/p>

Widget& Widget::operator= ( const Widget& p)

{

if(this == &p) ?return *this;

delete q;

q = new Base(*p.q);

return *this;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屉符,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锹引,更是在濱河造成了極大的恐慌矗钟,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫌变,死亡現(xiàn)場(chǎng)離奇詭異吨艇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)腾啥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門东涡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)冯吓,“玉大人,你說(shuō)我怎么就攤上這事软啼∩5” “怎么了延柠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵祸挪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我贞间,道長(zhǎng)贿条,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任增热,我火速辦了婚禮整以,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峻仇。我一直安慰自己公黑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布摄咆。 她就那樣靜靜地躺著凡蚜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吭从。 梳的紋絲不亂的頭發(fā)上朝蜘,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音涩金,去河邊找鬼谱醇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛步做,可吹牛的內(nèi)容都是我干的副渴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼全度,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼佳晶!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起讼载,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤轿秧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后咨堤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體菇篡,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年一喘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驱还。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗜暴。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖议蟆,靈堂內(nèi)的尸體忽然破棺而出闷沥,到底是詐尸還是另有隱情,我是刑警寧澤咐容,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布舆逃,位于F島的核電站,受9級(jí)特大地震影響戳粒,放射性物質(zhì)發(fā)生泄漏路狮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一蔚约、第九天 我趴在偏房一處隱蔽的房頂上張望奄妨。 院中可真熱鬧,春花似錦苹祟、人聲如沸砸抛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)直焙。三九已至,卻和暖如春团赏,著一層夾襖步出監(jiān)牢的瞬間箕般,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工舔清, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丝里,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓体谒,卻偏偏與公主長(zhǎng)得像杯聚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抒痒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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