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 回答