ホームページ >バックエンド開発 >C++ >C では、クラス メンバーはどのように初期化および破棄されますか?

C では、クラス メンバーはどのように初期化および破棄されますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 10:02:02196ブラウズ

In C  , How are Class Members Initialized and Destroyed?

クラス メンバーの初期化と破棄の順序

C では、クラス メンバーの初期化と破棄の順序がオブジェクトの有効期間管理において重要な役割を果たします。この動作は、一般に「コンストラクターとデストラクターの呼び出し順序」と呼ばれます。

メンバーの初期化順序

C 標準では、メンバー変数がその順序で初期化されるように指定されています。クラス定義内で宣言されます。この順序により、基底クラスが派生クラスの前に初期化され、非静的データ メンバーが出現順に初期化されることが保証されます。

メンバーの破棄順序

逆の順序メンバーの破壊に適用されます。デストラクターは初期化の逆の順序で呼び出されます。派生クラスのデストラクターは基本クラスのデストラクターの前に呼び出され、非静的データ メンバーのデストラクターは宣言の逆の順序で呼び出されます。

Example

次のプログラムについて考えてみましょう:

#include <iostream>
using namespace std;

struct A
{
    A() { cout << "A::A" << endl; }
    ~A() { cout << "A::~" << endl; }
};

struct B
{
    B() { cout << "B::B" << endl; }
    ~B() { cout << "B::~" << endl; }
};

struct C
{
    C() { cout << "C::C" << endl; }
    ~C() { cout << "C::~" << endl; }
};

struct Aggregate
{
    A a;
    B b;
    C c;
};

int main()
{
    Aggregate a;
    return 0;
}

このプログラムを実行すると、次の出力が生成されます:

A::A
B::B
C::C
C::~
B::~
A::~

予想どおり、Aggregate のメンバーは A の順序で初期化されます。 、B、次に C、そしてそれらのデストラクターは逆の順序で呼び出されます。

したがって、はい、C は、クラス メンバーと集合体型の両方について、メンバーが宣言の順序で初期化され、逆の順序で破棄されることを保証します。

以上がC では、クラス メンバーはどのように初期化および破棄されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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