コンストラクターと同様に、デストラクターも継承できません。コンストラクターとは異なり、派生クラスのデストラクターで基本クラスのデストラクターを明示的に呼び出す必要はありません。各クラスにはデストラクターが 1 つだけあり、コンパイラーはプログラマーの介入なしで選択する方法を知っているためです。
さらに、デストラクターの実行順序とコンストラクターの実行順序はまったく逆になります。
-
派生クラス オブジェクトを作成する場合、コンストラクターの実行順序は継承順序と同じです。つまり、基本クラスのコンストラクターが最初に実行され、次に派生クラスのコンストラクターが実行されます。
-
派生クラス オブジェクトを破棄する場合、デストラクターの実行順序は継承順序とは逆になります。つまり、派生クラスのデストラクターが最初に実行され、次に基本クラスのデストラクターが実行されます。
詳細については、例を参照してください。
#include <iostream>
using namespace std;
class A{
public:
A(){cout<<"A constructor"<<endl;}
~A(){cout<<"A destructor"<<endl;}
};
class B: public A{
public:
B(){cout<<"B constructor"<<endl;}
~B(){cout<<"B destructor"<<endl;}
};
class C: public B{
public:
C(){cout<<"C constr