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

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

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

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