基類析構(gòu)函數(shù)必須為虛函數(shù)否則會(huì)造成內(nèi)存泄漏

https://blog.csdn.net/asd199086/article/details/52206241

(1)基類的的析構(gòu)函數(shù)不是虛函數(shù)的話,刪除指針時(shí),只有其類的內(nèi)存被釋放,派生類的沒(méi)有。這樣就內(nèi)存泄漏了。

(2)析構(gòu)函數(shù)不是虛函數(shù)的話,直接按指針類型調(diào)用該類型的析構(gòu)函數(shù)代碼,因?yàn)橹羔橆愋褪腔?,所以直接調(diào)用基類析構(gòu)函數(shù)代碼。

(3)問(wèn):啥已經(jīng)delete p了還能給p賦值啊。。。不解,求高人指點(diǎn)??


答:delete是刪除指針p指向的實(shí)例,p指針本身依然存在,delete后將p置為空值是常用做法,空值一般寫成NULL宏,其實(shí)就是0。因?yàn)閮?nèi)存0位置是不允許訪問(wèn)的,delete

0操作編譯器可以判斷是錯(cuò)誤操作不會(huì)執(zhí)行,因此將p置為空值0是很安全的做法。

(4)養(yǎng)成習(xí)慣:基類的析構(gòu)一定virtual。

(5)當(dāng)基類指針指向派生類的時(shí)候,如果析構(gòu)函數(shù)不聲明為虛函數(shù),在析構(gòu)的時(shí)候,不會(huì)調(diào)用派生類的析構(gòu)函數(shù),從而導(dǎo)致內(nèi)存泄露。

(6)子類對(duì)象創(chuàng)建時(shí)先調(diào)用父類構(gòu)造函數(shù)然后在調(diào)用子類構(gòu)造函數(shù),在清除對(duì)象時(shí)順序相反,所以delete p只清除了父類,而子類沒(méi)有清除。。。

(7)當(dāng)基類對(duì)象的指針或引用調(diào)用派生類對(duì)象時(shí),如果基類的析構(gòu)函數(shù)不是虛析構(gòu)函數(shù),則通過(guò)基類指針或引用對(duì)派生類的析構(gòu)是不徹底的。

?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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