【发布时间】:2010-02-11 10:24:48
【问题描述】:
这是我经常遇到的问题。以下示例说明了这一点:
struct A {
int m_SomeNumber;
};
struct B {
B( A & RequiredObject );
private:
A & m_RequiredObject;
};
struct C {
C( );
private:
A m_ObjectA;
B m_ObjectB;
};
C 的构造函数的实现如下所示:
C::C( )
: B( m_ObjectA )
{ }
由于未定义初始化顺序,m_ObjectA 可能在调用m_ObjectB 的构造函数时未初始化,导致未定义行为。强制执行某种初始化顺序的一种方法是使成员指针并在构造函数主体中初始化它们,从而强制执行正确的顺序,但这很丑陋,原因有几个。有没有办法使用构造函数的初始化列表强制某个初始化顺序?如果没有,您有任何其他建议如何处理。
【问题讨论】:
标签: c++ constructor ctor-initializer c++-faq