C/C++沉思-----多態(tài)時(shí)一定要將父類(lèi)(基類(lèi))的析構(gòu)函數(shù)定義為虛函數(shù)

先來(lái)看一段代碼:


程序運(yùn)行截圖:

從程序的運(yùn)行結(jié)果來(lái)看,程序最后只釋放了父類(lèi)的內(nèi)存,子類(lèi)的內(nèi)存并沒(méi)有釋放。則這段程序產(chǎn)生了內(nèi)存泄露。那是什么原因?qū)е碌哪兀?br>

在main函數(shù)中new出來(lái)的是子類(lèi)son的對(duì)象,采用一個(gè)父類(lèi)father的指針來(lái)接收,故在析構(gòu)的時(shí)候,編譯器因?yàn)橹恢肋@個(gè)指針是父類(lèi)的,所以只將父類(lèi)部分的內(nèi)存析構(gòu)了,而不會(huì)去析構(gòu)子類(lèi)的內(nèi)存,就造成了內(nèi)存泄露,那么如何避免這種情況的產(chǎn)生呢?

將父類(lèi)的析構(gòu)函數(shù)改為虛函數(shù),就可以避免這種情況。



程序運(yùn)行截圖:

從程序的運(yùn)行結(jié)果可以看出,父類(lèi)和子類(lèi)的內(nèi)存都被析構(gòu)了。所以在使用多態(tài)時(shí)一定要將父類(lèi)的析構(gòu)函數(shù)定義成虛函數(shù),從而避免內(nèi)存泄露。

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 1. C++基礎(chǔ)知識(shí)點(diǎn) 1.1 有符號(hào)類(lèi)型和無(wú)符號(hào)類(lèi)型 當(dāng)我們賦給無(wú)符號(hào)類(lèi)型一個(gè)超出它表示范圍的值時(shí),結(jié)果是初始值...
    Mr希靈閱讀 18,174評(píng)論 3 82
  • 1.面向?qū)ο蟮某绦蛟O(shè)計(jì)思想是什么? 答:把數(shù)據(jù)結(jié)構(gòu)和對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的方法封裝形成一個(gè)個(gè)的對(duì)象。 2.什么是類(lèi)?...
    少帥yangjie閱讀 5,130評(píng)論 0 14
  • 繼承和多態(tài) 1. 繼承的優(yōu)缺點(diǎn) 優(yōu)點(diǎn):(1)子類(lèi)可以靈活地改變父類(lèi)中的已有方法;(2)能夠最大限度的實(shí)現(xiàn)代碼重用。...
    MinoyJet閱讀 732評(píng)論 0 0
  • const 引用 const 引用是指向 const 對(duì)象的引用:const int ival = 1024;co...
    rogerwu1228閱讀 744評(píng)論 0 1
  • 自定義權(quán)限的聲明 如果自定義的軟件中因?qū)ν馓峁┦裁捶?wù),而想聲明一個(gè)權(quán)限,來(lái)限制此服務(wù)的使用,可以在Manifes...
    夏大王2019閱讀 2,289評(píng)論 0 1

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