仮想デストラクタ


派生クラスを作成した場合、コンストラクタは基底クラス→派生クラスの順に呼ばれる。
一方デストラクタは、派生クラス→基底クラスの順に呼ばれる。

非仮想関数では、基底であっても派生であっても、インスタンスの型を見てどちらのクラスの関数を呼び出すかを決める(静的結合)。
一方仮想関数では、実行時にそのインスタンスが基底か派生かを調べ、どちらの関数を呼び出すか決める(動的結合)。

そのため基底クラスのデストラクタが仮想でない場合、基底クラスのポインタに派生クラスをnewしてdeleteした際に、基底クラスのデストラクタしか呼ばれず、派生クラスのデストラクタが呼ばれない。