關(guān)于C++中的虛析構(gòu)函數(shù)
時間:2017-01-05作者:華清遠(yuǎn)見
《effective C++》中的條款14:確定基類有虛析構(gòu)函數(shù)。也就是說,如果某個類要作為基類來使用,一般使用虛析構(gòu)函數(shù)。看下面的例子:
class A{
class B: public A 測試: A *p = new B; delete p; 代碼的輸出結(jié)果: ~A() 我們發(fā)現(xiàn)B類的析構(gòu)函數(shù)沒有調(diào)用,導(dǎo)致內(nèi)存泄露。(因為動態(tài)編譯,在運行時會檢查有無派生類對象重載本函數(shù),有則調(diào)用之。) 當(dāng)我們可能通過基類指針刪除派生類對象時,并且被析構(gòu)的對象是有重要的析構(gòu)函數(shù)的派生類的對象,就需要讓基類的析構(gòu)函數(shù)成為虛擬的。 當(dāng)一個類不準(zhǔn)備作為基類使用時,使析構(gòu)函數(shù)為虛函數(shù)一般是個壞主意。因為當(dāng)類里面有虛函數(shù)的時候,編譯器會給類添加一個虛函數(shù)表,里面來存放虛函數(shù)指針,這樣就會增加類的存儲空間。所以,只有類要作為基類來使用時,才把析構(gòu)函數(shù)寫成虛函數(shù)。
相關(guān)資訊
發(fā)表評論
|