第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

關(guān)于析構(gòu)函數(shù)的問題

如果我們定義了一個(gè)析構(gòu)函數(shù),系統(tǒng)就不會(huì)再定義了嗎?如果是這樣的話,要是我們定義析構(gòu)函數(shù)時(shí)里面不寫任何語句,系統(tǒng)是怎么銷毀對(duì)象的呢?是不是系統(tǒng)里本來就有這個(gè)操作,只要我們寫出“~類名”這個(gè)語句,就會(huì)自動(dòng)執(zhí)行?

正在回答

2 回答

我用以下實(shí)驗(yàn)來解決一下這個(gè)問題,好久之前的欸,。

一、我不加入析構(gòu)函數(shù)讓系統(tǒng)自動(dòng)生成默認(rèn)的,看一下效果

1.class.h中:

http://img1.sycdn.imooc.com//5e561d120001d0fe08140332.jpg

不自定義~Teacher(),并設(shè)一個(gè)指針p;


2.class.cpp中:

http://img1.sycdn.imooc.com//5e561b6f00018f1207540149.jpg

構(gòu)造函數(shù)申請(qǐng)一片空間,并給空間賦值10;


3.main.c中:

http://img1.sycdn.imooc.com//5e561b800001a0ea03420319.jpg

我定義一個(gè)函數(shù)test,返回值為指針,函數(shù)中申請(qǐng)一個(gè)對(duì)象,將對(duì)象的指針p作為返回值。這里我解釋一下,我們都知道有局部變量,并且前面有講到??臻g,局部變量就存在??臻g中,會(huì)隨著函數(shù)返回而釋放,即對(duì)象被銷毀了。于是會(huì)調(diào)用系統(tǒng)自動(dòng)生成的析構(gòu)函數(shù)。

前面也學(xué)到new申請(qǐng)的是堆空間,它不會(huì)隨著函數(shù)返回而消失,如果沒有delete的話。我用主函數(shù)定義一個(gè)指針來指向這個(gè)new申請(qǐng)的空間,防止它走失。這時(shí)候,就可以查看main函數(shù)中指針p所指空間是否為10,就可以來判斷這片空間是否被銷毀了。

運(yùn)行結(jié)果如下:

http://img1.sycdn.imooc.com//5e561b8a00012a9403000059.jpg

顯然,依舊存在數(shù)據(jù)。所以可以得到,系統(tǒng)默認(rèn)的析構(gòu)函數(shù)他不會(huì)delete,也不會(huì)p=NULL。

當(dāng)然,我還是要繼續(xù)進(jìn)行下面的實(shí)驗(yàn),如果我們自定義析構(gòu)函數(shù)加入delete和NULL,運(yùn)行結(jié)果是怎么樣的?是不是空間被銷毀導(dǎo)致主函數(shù)獲得的返回空間是亂碼:

二、我加入自定義析構(gòu)函數(shù),手動(dòng)delete,看一下效果

1.class.h與class.cpp

http://img1.sycdn.imooc.com//5e561c44000181ee05220073.jpg

http://img1.sycdn.imooc.com//5e561c500001b84104350129.jpg

2.運(yùn)行結(jié)果

http://img1.sycdn.imooc.com//5e561c5c00015dfe02680071.jpg

可以看到,函數(shù)結(jié)束后調(diào)用了一次~Teacher(),并且主函數(shù)的p指針最終指向的數(shù)據(jù)是一堆我們看不懂的亂碼,也就是說,空間內(nèi)數(shù)據(jù)或者空間其實(shí)已被銷毀了。


總結(jié):

????????綜上所述,如你所說的,如果自己定義一個(gè)析構(gòu)函數(shù)里面什么都不寫,確實(shí)銷毀的時(shí)候什么都不執(zhí)行。

????????而且系統(tǒng)默認(rèn)生成的析構(gòu)函數(shù)也不會(huì)銷毀掉new申請(qǐng)的堆空間,大工程如果大量申請(qǐng)堆空間而沒有銷毀,會(huì)占用很大的內(nèi)存資源。

????????我覺得這個(gè)方法或許是用來匹配自己其他方法中new申請(qǐng)的空間或者其他,統(tǒng)一于對(duì)象銷毀時(shí)執(zhí)行delete或者其他刪除操作,延長(zhǎng)申請(qǐng)的這塊空間的生命周期,從對(duì)象創(chuàng)建到對(duì)象銷毀整個(gè)過程中,都能使用這塊空間。

????

希望對(duì)你有幫助。大力感謝制作視頻的老師,太厲害了!






0 回復(fù) 有任何疑惑可以回復(fù)我~

析構(gòu)函數(shù)在對(duì)象銷毀時(shí)調(diào)用,要銷毀對(duì)象需要自己寫銷毀代碼,系統(tǒng)不會(huì)自動(dòng)銷毀對(duì)象,個(gè)人理解

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
C++遠(yuǎn)征之封裝篇(上)
  • 參與學(xué)習(xí)       103387    人
  • 解答問題       732    個(gè)

封裝--面向?qū)ο蟮幕?,本教程力求幫助小伙伴們即學(xué)即會(huì)

進(jìn)入課程

關(guān)于析構(gòu)函數(shù)的問題

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)