这是我经常遇到的问题。下面的示例说明了它:
struct A {
int m_SomeNumber;
};
struct B {
B( A & RequiredObject );
private:
A & m_RequiredObject;
};
struct C {
C( );
private:
A m_ObjectA;
B m_ObjectB;
};
< p > C
的构造函数实现大致如下:
C::C( )
: B( m_ObjectA )
{ }
由于初始化顺序未定义,当调用
m_ObjectB
的构造函数时,m_ObjectA
可能未被初始化,导致未定义的行为。 一种强制特定初始化顺序的方法是使成员成为指针,并在构造函数体中初始化它们,从而强制正确顺序,但这种做法有很多不好之处。 是否有任何方法可以使用构造函数的初始化列表来强制特定的初始化顺序? 如果没有,请问你有什么其他建议来处理这个问题。