基底クラス

base-class.png

親クラスのこと

class CDerivation : CBase{}

基底クラスとして使うつもりのあるクラスではデストラクタ仮想宣言すること。

class CBase{
CBase();
virtual ~CBase();//デストラクタを仮想宣言する
};

理由

基底クラスのポインタを介して派生クラスのオブジェクトを削除しようとするとき、その基底クラスに仮想でないデストラクタがあると
その結果は不定になる
実際に困るのはstaticメンバ変数で自分の数をカウントしていた時、
派生クラスのデストラクタが呼び出されず、カウントしていたオブジェクトの数が間違って表現されてしまう
のが具体的に困ること。

サポートサイト Wikidot.com