14項 基底クラスには仮想デストラクタを持たせよう

"基底クラスには仮想デストラクタを持たせよう"


基底クラスには仮想デストラクタを持たせます。
基底クラスのポインタを介して派生クラスのオブジェクトを削除するとき、その基底クラスに仮想でないデストラクタがあると、その結果は不定となるからです。
ためしにVisualC++2010で基底クラスのポインタから、仮想デストラクタを持たない派生クラスを削除したところ、基底クラスのデストラクタのみが呼び出されました。

抽象クラスのデストラクタは、純粋仮想関数にします。
このとき、基底クラスの純粋仮想デストラクタを定義する必要があります。