ホームページ >バックエンド開発 >C++ >C 継承における構築と破壊の順序は何ですか?

C 継承における構築と破壊の順序は何ですか?

DDD
DDDオリジナル
2024-11-29 12:04:11683ブラウズ

What's the Order of Construction and Destruction in C   Inheritance?

継承における構築と破棄の順序

次のクラス階層を考えてみましょう。

struct A {
    A() { std::cout << "A() C-tor" << std::endl; }
    ~A() { std::cout << "~A() D-tor" << std::endl; }
};

struct B : public A {
    B() { std::cout << "B() C-tor" << std::endl; }
    ~B() { std::cout << "~B() D-tor" << std::endl; }

    A a;
};

インスタンスがB が作成されます (int main() { B b; } のように)、構築と破棄の順序は特定に従います。ルール:

構築順序:

  1. 基本クラス コンストラクター: 基本クラス (A) のコンストラクターが最初に呼び出されます。
  2. メンバー フィールドの構築: 派生クラスのメンバー フィールド(B) は宣言された順序で構築されます。この場合、クラス A のインスタンス a が構築されます。
  3. 派生クラス コンストラクター: 最後に、派生クラス (B) のコンストラクターが呼び出されます。

これは次の呼び出しに変換されます順序:

  • A()
  • A(a)
  • B()

破壊命令:

  1. 派生クラスデストラクター: 派生クラス (B) のデストラクターが最初に呼び出されます。
  2. メンバー フィールドの破壊: 派生クラスのメンバー フィールドは、構築された逆の順序で破棄されます。 。この場合、クラス A のインスタンス a が破棄されます。
  3. Base Class Destructor: 最後に、基本クラス (A) のデストラクターが呼び出されます。

これにより、次のような破壊が起こりますorder:

  • ~B()
  • ~A(a)
  • ~A()

したがって、構築順序は基本クラスから始まり、メンバーフィールドに進み、派生クラスで終わります。破壊の順序は建設の順序の逆です。

以上がC 継承における構築と破壊の順序は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。