先來(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)存泄露。