#include <iostream> using namespace std; class C { public: C(){ cout << "C start" << endl; } virtual ~C(){ cout << "C end" << endl; } }; class B { public: B(){ cout << "B start" << endl; } virtual ~B(){ cout << "B end" << endl; } }; class A { public: B b; A(){ cout << "A start" << endl; } virtual ~A(){ cout << "A end" << endl; } }; int main() { A a; C c; return 0; }
B start A start C start C end A end B end
Aはメンバー変数にBを持つ。このとき
コンストラクタはメンバー変数のほうが先に呼ばれる(コンストラクタの中で使えるし)
デストラクタはメンバー変数のほうが後で呼ばれる(デストラクタの中で使えるし)
同じ階層のメンバー変数は、コンストラクタは宣言順に、デストラクタは宣言と逆順に呼ばれる。 これは仕様で決まってる
C++の規格において、自動変数として使われたクラスのデストラク… - 人力検索はてな
コンストラクタとデストラクタ | Programming Place Plus C++編【言語解説】 第13章