問題:
C で、クラスに他のクラスのメンバー変数が含まれている場合クラスでは、初期化と破棄の順序が重要です。次のプログラムについて考えてみましょう:
#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; }
C 標準では、このプログラムが常に次の出力を生成することが保証されていますか:
A::A B::B C::C C::~ B::~ A::~
答え:
はい、そうです
C 標準のセクション 12.6.2 に従って、クラス内のメンバーの初期化と破棄は特定のルールに従います。
この例では、Aggregate 構造体のメンバーは a、b、c の順序で宣言されています。したがって、A::A、B::B、C::C の順序で初期化され、その逆の C::~、B::~、A::~ の順序で破棄されることが保証されます。
以上がC 標準では、他のクラスのメンバー変数を含むクラス内でのメンバーのコンストラクターとデストラクターの呼び出しの順序はどのように保証されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。