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(); };