doc*_*doc 5 c++ constructor initialization reference
可以将未初始化的对象传递给父类,如下例所示
class C
{
public:
C(int i):
m_i(i)
{};
int m_i;
}
class T
{
public:
T(C & c):
m_c(c)
{
};
C & m_c;
};
class ST : public T
{
public:
ST():
T(m_ci),
m_ci(999)
{
};
C m_ci;
};
Run Code Online (Sandbox Code Playgroud)
在class T构造函数中,c是对未初始化对象的引用.如果在施工期间class T使用c物体,这可能会导致错误.但由于它不是,这编译并正常工作.我的问题是 - 它是否会制定某种范式或良好的设计指令?如果是这样,有什么选择,因为我发现在子类中分配父对象所需的对象很有用.
在旁注中,我想知道为什么不可能改变初始化顺序,以便在初始化某些成员之后调用基类构造函数.
你可以,但你会得到未定义的行为。
在 Boost 的实用程序中,您将找到由R. Samuel Klatchko创建的基于成员的基础习惯用法。基本上,您在私人成员的位置上创建了一个私人基地。该基地首先被初始化,您可以将其用于其他基地:
// ...
class C_base
{
public:
C_base(int i) :
m_ci(i)
{}
C m_ci;
};
class ST :
private C_base
public T
{
public:
ST() :
C_base(999),
T(m_ci),
{
};
};
Run Code Online (Sandbox Code Playgroud)
Boost 的实用程序消除了重复的代码。