ホームページ > バックエンド開発 > C++ > 継承におけるコンストラクターとデストラクターの正確な呼び出し順序は何ですか?

継承におけるコンストラクターとデストラクターの正確な呼び出し順序は何ですか?

Linda Hamilton
リリース: 2024-12-03 02:34:10
オリジナル
367 人が閲覧しました

What's the Exact Call Order of Constructors and Destructors in Inheritance?

継承におけるコンストラクターとデストラクターの呼び出し順序を理解する

オブジェクト指向プログラミングでは、クラスは基本クラスから継承し、派生クラスがプロパティを継承する階層関係を作成できます。そして親クラスの動作。これらのクラスのオブジェクトを作成および破棄する場合、コンストラクターとデストラクターの呼び出しの順序は、オブジェクトの初期化と終了において重要な役割を果たします。

指定された例の場合:

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;  // Field of type A in class B
};
ログイン後にコピー

および次のとおりです。メインのコード:

int main() {
    B b;
}
ログイン後にコピー

構築順序

  1. 基本クラスの構築: 構築プロセスは常に基本クラスのコンストラクターから始まります。この場合、A は基本クラスであるため、そのコンストラクター A() が最初に呼び出されます。
  2. メンバー フィールドの構築: 基本クラスが構築された後、メンバー フィールドはそれらが宣言される順序。ここで、B には型 A のフィールド a があります。明示的に定義された初期化子リストがないため、デフォルトの初期化子が使用されます。これは単に a のコンストラクターを呼び出します。
  3. 派生クラス構築:メンバー フィールドが初期化されると、派生クラスのコンストラクターを呼び出すことができます。この場合、B() が呼び出されます。

破壊順序

デストラクター呼び出しの順序は、構築順序のまったく逆です:

  1. 派生クラスの破壊: まず、派生クラスのデストラクター ~B() は次のとおりです。
  2. メンバー フィールドの破棄: 次に、メンバー フィールドが宣言とは逆の順序で破棄されます。型 A のフィールド a が破棄されます。
  3. 基本クラスの破棄: 最後に、基本クラスのデストラクター ~A() が呼び出されます。

初期化子リストが使用されているかどうかに関係なく、構築と破棄の呼び出し順序はこれらの原則に従い、継承内のオブジェクトの適切な初期化とクリーンアップが保証されます。階層。

以上が継承におけるコンストラクターとデストラクターの正確な呼び出し順序は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート