C++中析构函数
析構(gòu)函數(shù):
1.析構(gòu)函數(shù)不能被重載;
2.析構(gòu)函數(shù)可以是虛函數(shù);
3.析構(gòu)函數(shù)沒(méi)有參數(shù),沒(méi)有返回值;
4.當(dāng)類(lèi)對(duì)象的生命周期結(jié)束,系統(tǒng)會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù);
5.若沒(méi)有顯式的析構(gòu)函數(shù),系統(tǒng)會(huì)調(diào)用默認(rèn)的析構(gòu)函數(shù);
下面記錄一下一個(gè)小示例,目的是說(shuō)明虛析構(gòu)函數(shù)的必要性。若析構(gòu)函數(shù)不是虛函數(shù),會(huì)發(fā)生什么,vs2010下創(chuàng)建控制臺(tái)輸出程序,下面看代碼,以及運(yùn)行實(shí)例;
classObject.cpp
運(yùn)行上面的代碼,控制臺(tái)輸出結(jié)果是:
可以看出析構(gòu)函數(shù)調(diào)用的時(shí)候只調(diào)用了,父類(lèi)的析構(gòu)函數(shù),沒(méi)有調(diào)用子類(lèi)的析構(gòu)函數(shù),即沒(méi)有釋放子類(lèi)的對(duì)象,無(wú)形中造成內(nèi)存泄漏,下面我們來(lái)將父類(lèi)的析構(gòu)函數(shù)定義為虛析構(gòu),即在父類(lèi)的析構(gòu)函數(shù)前加關(guān)鍵字virtual,將父類(lèi)析構(gòu)函數(shù)改為下面這樣,其它不變。
Base(){cout<<"析構(gòu)函數(shù)Base()"<<endl;}//基類(lèi)的析構(gòu)函數(shù)是虛析構(gòu)函數(shù)
編譯運(yùn)行程序,結(jié)果如下:
總結(jié):當(dāng)一個(gè)類(lèi)作為父類(lèi)的時(shí)候,最好將此類(lèi)的析構(gòu)函數(shù)定義為虛析構(gòu)函數(shù)。
總結(jié)
- 上一篇: C语言 main 函数参数 main(i
- 下一篇: c++ raiseexception产生