c++學(xué)習(xí)筆記2(GeekBand)

拷貝構(gòu)造舌剂、拷貝賦值和析構(gòu)

c++中有Big Three三個(gè)特殊的函數(shù),他們就是拷貝構(gòu)造函數(shù)绒净,拷貝賦值函數(shù)和析構(gòu)函數(shù)。

那么什么被成為拷貝構(gòu)造函數(shù)呢偿衰?和構(gòu)造函數(shù)類似挂疆,拷貝構(gòu)造函數(shù)是用來在初始化類的實(shí)例時(shí)所使用的函數(shù),不過是以拷貝的方式下翎, 把一個(gè)已經(jīng)存在的類的對象賦值給另外一個(gè)對象缤言。拷貝構(gòu)造函數(shù)同構(gòu)造函數(shù)一樣视事,沒有返回值胆萧。因?yàn)槭峭粋€(gè)類的不同對象,所以在拷貝構(gòu)造函數(shù)中俐东,我們能夠直接訪問類中的私有成員變量跌穗。
如下這種做法是可以通過編譯的:
MyString::MyString(const MyString& rStr)
{
m_data = new char[strlen(rStr.m_data) + 1];
strcpy(m_data, rStr.m_data);
}
但是下面這種做法則不能通過編譯,原因就是這個(gè)拷貝構(gòu)造函數(shù)的傳入?yún)?shù)并不是同一個(gè)類的對象虏辫,而是另外一個(gè)類的對象蚌吸,所以它的私有成員變量是不可訪問的。
MyString::MyString(const OtherString& ostr)
{
m_data = new char[strlen(ostr.m_data) + 1];
strcpy(m_data, ostr.m_data);
}

拷貝賦值函數(shù)和賦值函數(shù)比較類似砌庄,需要通過重載操作符=來實(shí)現(xiàn)自己的拷貝賦值函數(shù)羹唠。在實(shí)現(xiàn)拷貝賦值函數(shù)的時(shí)候奕枢,需要注意的一點(diǎn)是:自引用的檢查。
如下是我實(shí)現(xiàn)的一個(gè)MyString的拷貝賦值函數(shù):
MyString& MyString::operator = (const MyString& rStr)
{
if (this == &rStr)//自引用檢查
return *this;
delete[] m_data;
m_data = new char[strlen(rStr.m_data) + 1];
strcpy(m_data, rStr.m_data);
return this;
}
最后是析構(gòu)函數(shù)肉迫。析構(gòu)函數(shù)是在類的對象生命周期結(jié)束的時(shí)候所調(diào)用的函數(shù)验辞。所以需要把類中通過Malloc或者new創(chuàng)建的內(nèi)存地址釋放掉,不然會(huì)導(dǎo)致內(nèi)存泄漏喊衫,當(dāng)工程項(xiàng)目比較大的時(shí)候跌造,甚至?xí)?dǎo)致程序的崩潰。使用free來釋放掉malloc函數(shù)分配的地址空間族购,delete來釋放new分配地址空間壳贪。侯老師有提到,其實(shí)new函數(shù)內(nèi)部就是先調(diào)用malloc函數(shù)給一個(gè)void
指針分配一片內(nèi)存空間寝杖,然后將類型強(qiáng)制轉(zhuǎn)換為所要分配的類型违施,最后調(diào)用函數(shù)的構(gòu)造函數(shù)。delete函數(shù)原理也類似瑟幕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末磕蒲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子只盹,更是在濱河造成了極大的恐慌辣往,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殖卑,死亡現(xiàn)場離奇詭異站削,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)孵稽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門许起,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菩鲜,你說我怎么就攤上這事园细。” “怎么了接校?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵珊肃,是天一觀的道長。 經(jīng)常有香客問我馅笙,道長伦乔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任董习,我火速辦了婚禮烈和,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘皿淋。我一直安慰自己招刹,他們只是感情好恬试,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疯暑,像睡著了一般训柴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妇拯,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天幻馁,我揣著相機(jī)與錄音,去河邊找鬼越锈。 笑死仗嗦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甘凭。 我是一名探鬼主播稀拐,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丹弱!你這毒婦竟也來了德撬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤躲胳,失蹤者是張志新(化名)和其女友劉穎蜓洪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泛鸟,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蝠咆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年踊东,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了北滥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闸翅,死狀恐怖再芋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坚冀,我是刑警寧澤济赎,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站记某,受9級(jí)特大地震影響司训,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜液南,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一壳猜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滑凉,春花似錦统扳、人聲如沸喘帚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吹由。三九已至,卻和暖如春朱嘴,著一層夾襖步出監(jiān)牢的瞬間倾鲫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工腕够, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留级乍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓帚湘,卻偏偏與公主長得像玫荣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子大诸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

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