ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

基底クラスには仮想デストラクタ

Effective C++ 第2章7項
ある基底クラスから派生クラスを作成し、派生クラスのオブジェクトを基底クラスのポインタで扱うような場合。基底クラスのデストラクタが仮想でない場合、派生クラスのデストラクタが実行されなくなってしまう。

class Base {
public:
    Base();
    ~Base();
};

class Test : public Base {};

int main()
{
    Test* p = new Test();

    delete p;
}

このような場合、Baseクラスの部分だけが破棄されることになり、Testクラスで作成した部分は破棄されない。

class Base {
public:
    Base();
    virtual ~Base();
};

このようにデストラクタにvirtualを付けて仮想デストラクタにすればよい。