継承におけるコンストラクターとデストラクターの呼び出しの順序
継承されたクラスを定義する場合、コンストラクターとデストラクターが呼び出されるシーケンスを理解することが重要です。次の例を考えてみましょう。
struct A { A() { cout << "A() C-tor" << endl; } ~A() { cout << "~A() D-tor" << endl; } }; struct B : public A { B() { cout << "B() C-tor" << endl; } ~B() { cout << "~B() D-tor" << endl; } A a; };
構築順序:
したがって、構築の順序は次のようになります。は:
破壊命令:
デストラクターは逆の順序で呼び出されます。構築:
の破壊順序は:
初期化子リスト:
B で明示的な初期化子リストが定義されていない場合でも、デフォルト初期化リストはコンパイラによって自動的に生成されます。このリストは、デフォルトのコンストラクターを使用して基底クラス (A) とメンバー フィールド (a) を初期化します。
結論として、継承におけるコンストラクターとデストラクターの呼び出しの順序は特定の規則に従います。コンストラクターは最初に基底クラスを初期化し、次にコンストラクターを初期化します。メンバーフィールド、そして最後に派生クラスです。デストラクターはクリーンアップ プロセスを逆の順序で呼び出します。継承を使用する場合に堅牢なコードを作成するには、これらのルールを理解することが不可欠です。
以上がC の継承におけるコンストラクターとデストラクターの呼び出しの順序は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。