引用未初始化的对象iniside构造函数

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物体,这可能会导致错误.但由于它不是,这编译并正常工作.我的问题是 - 它是否会制定某种范式或良好的设计指令?如果是这样,有什么选择,因为我发现在子类中分配父对象所需的对象很有用.

在旁注中,我想知道为什么不可能改变初始化顺序,以便在初始化某些成员之后调用基类构造函数.

GMa*_*ckG 1

可以,但你会得到未定义的行为。

在 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 的实用程序消除了重复的代码。