0

在网站上还没有发现这个问题。所以说我有两个类,一个包含对另一个的引用:

class ClassA {};

class ClassB
{
    classA & r_classA;
    public:
        ClassB( ClassA & io_classA ):r_classA( io_classA ){}
};

所以,如果我想创建一个 ClassB 的实例,我必须在构造函数中将一个对 classA 的引用传递给它:

int main()
{
    ClassA classA;
    ClassB classB ( classA );
    return 0;
}

现在假设我创建了一个包含这两个的 ClassC 类:

class ClassC
{
    ClassA m_classA;
    ClassB m_classB;
    public:
        ClassC();
}

我的问题是,我可以指望在初始化列表中构造 m_classB 之前创建 m_classA 吗?也就是说,我可以这样做吗:

ClassC::ClassC()
: m_classA()
, m_classB( m_classA )
{}

这个标准符合吗?便携的?我需要采取任何特殊的预防措施吗?我已经在 ClassC 的主体中在 m_classB 之前声明了 m_classA,并且编译器没有抛出任何警告。该程序似乎工作正常。我只是想检查一下我没有指望一些不可靠的行为会导致崩溃或奇怪的错误。

4

1 回答 1

4

类成员按照它们的声明顺序进行初始化,因此您的代码定义良好并且按照您的想法行事。

(如果构造函数初始化列表的顺序与声明的顺序不同,一个好的编译器应该会警告你,因为这确实是一个微妙的错误来源。但是你的代码是正确的。)

于 2013-10-05T19:51:56.207 回答