将非默认构造函数调用为成员初始化

时间:2018-06-14 15:26:30

标签: c++ c++11 initialization copy-constructor default-constructor

我有一个班级" A"和一个班级" B"这样A包含B

的实例
class A
{
    B b = B(parameters...);
    Other thing = 3;
}

这段代码的问题在于B没有(也不应该!)有一个复制构造函数,所以编译器抱怨了

我希望能够像下面这样调用B&#39的构造函数,但它将其解释为函数声明

class A
{
    B b(parameters...);
    Other thing = 3;
}

有没有办法在类的定义中调用非默认构造函数?

2 个答案:

答案 0 :(得分:2)

Default member initializer(因为C ++ 11)只支持大括号或等于初始化器;你可以在这里使用大括号初始化器。

class A
{
    B b{parameters...};
    Other thing = 3;
};

答案 1 :(得分:1)

如果您需要使复制构造函数不可见,可以将其设为private

Class B
{
     public:
     B(parameters...){};

     private:
     B(B b){};
}

至于你的代码,我认为你的问题是你需要像这样在A的构造函数中启动成员:

 class A
{
    A()
      : B(parameters...)
    {
        thing = 3;
    }

    B b;
    Other thing;
}