C++語言標(biāo)準(zhǔn)關(guān)于這個問題的闡述非常清楚:當(dāng)通過基類的指針去刪除派生類的對象(注),而基類又沒有虛析構(gòu)函數(shù)時,結(jié)果將是不可確定的。實際運(yùn)行時經(jīng)常發(fā)生的是,派生類的析構(gòu)函數(shù)永遠(yuǎn)不會被調(diào)用。

因此,若一個類含有虛函數(shù),就應(yīng)當(dāng)確保它有虛析構(gòu)函數(shù)。

如果某個類不包含虛函數(shù),那一般是表示它將不作為一個基類來使用。當(dāng)一個類不準(zhǔn)備作為基類使用時,使析構(gòu)函數(shù)為虛一般是個壞主意。這將帶來不必要的開銷(增加了虛函數(shù)表指針)。

注:為什么會出現(xiàn)基類的指針指向派生類對象的情況?就是因為為了使用基類虛函數(shù)的多態(tài)性。若基類沒有虛函數(shù),那么就不應(yīng)該使用“指向派生類對象的基類的指針”,因為這樣的代碼是毫無意義的。