C++語言標準關于這個問題的闡述非常清楚:當通過基類的指針去刪除派生類的對象(注),而基類又沒有虛析構函數時,結果將是不可確定的。實際運行時經常發生的是,派生類的析構函數永遠不會被調用。

因此,若一個類含有虛函數,就應當確保它有虛析構函數。

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

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