0

オブジェクトの初期化にイニシャライザリストを使用してオブジェクト管理を簡素化したいのですが、問題はオブジェクトが相互に参照し合うことです。

//B::B(A &a) //The only available constructor for B

class AB
{
    A m_a;
    B m_b;

    AB()
        : m_a()
        , m_b(m_a)

    ...
};

これは標準で許可されていますか?私が理解していることから、クラス内のメンバー宣言がA、次にBであるとすると、初期化リストの順序は重要ではありません。クラス内の物理的な順序によって初期化されるからです。

4

1 に答える 1

2

これは標準で許可されていますか?私が理解していることから、クラス内のメンバー宣言がA、次にBであるとすると、初期化リストの順序は重要ではありません。クラス内の物理的な順序によって初期化されるからです。

はい、初期化の順序は、クラスのメンバー属性の宣言の順序です。さらに、コンストラクターの動作によってBは、参照またはポインターが格納されている限り、参照(またはポインター)である限り、まだ初期化されていないオブジェクトに参照を渡すことは正しいですが、オブジェクトは使用されていない。

于 2012-06-26T03:39:16.950 に答える