非静的データ メンバーの初期化順序
C では、クラス内の非静的データ メンバーの初期化順序が決定されます。クラス定義内で宣言された順序によって決まります。これは、C 標準のセクション 12.6.2 で指定されています。
この標準では、「非静的データ メンバーは、クラス定義で宣言された順序で初期化されるものとする」と規定されています。この順序は、クラス定義に存在するメンバー初期化子の順序に関係なく適用されます。
次のクラス定義を考えてみましょう。
class A {}; class B {}; class X { A a; B b; };
クラス X のコンストラクターが呼び出されるとき、データ メンバー a と b は、クラス定義に出現する順序で初期化されます。これは、クラス A のコンストラクターがクラス B のコンストラクターより前に呼び出されるということを意味します。
標準では、ベース サブオブジェクトとメンバー サブオブジェクトが初期化の逆の順序で破棄されることを保証するために、この順序が指定されています。これは、ダングリング ポインターやその他のメモリ管理の問題を防ぐために重要です。
以上がC の非静的データ メンバーの初期化順序は何によって決まりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。