C++ 如何在另一个构造函数中调用对象构造函数?

C++ 如何在另一个构造函数中调用对象构造函数?,c++,c++11,constructor,C++,C++11,Constructor,我有一个抽象类A和一个带有构造函数的类B: B(A &a) {...} 现在,我在主程序中创建这些对象,如下所示: int main(){ std::unique_ptr<A> a = make_A();//don't mind make_A() if(a==null) a = make_default_A(); B b (*a); } 显然,这是错误的,因为我不能像上面的代码那样调用B的构造函数,但我不知道怎么做。我想到的唯一解决办法是使用std:

我有一个抽象类
A
和一个带有构造函数的类
B

B(A &a) {...}
现在,我在主程序中创建这些对象,如下所示:

int main(){
  std::unique_ptr<A> a = make_A();//don't mind make_A()
  if(a==null)
    a = make_default_A();
  B b (*a); 
}
显然,这是错误的,因为我不能像上面的代码那样调用
B
的构造函数,但我不知道怎么做。我想到的唯一解决办法是使用
std::unique\u ptr b而不是
B然后调用
b=make(*a)

应该是:

class System{
public:
  System() : a(make_A()), b(*a) {} // use initializer list for constructor
private:
  // Fix order of members to initialize in correct order.
  std::unique_ptr<A> a;
  B b;
};
类系统{
公众:
System():a(make_a()),b(*a){}//为构造函数使用初始值设定项列表
私人:
//修正成员的顺序,以正确的顺序初始化。
std::唯一的ptr a;
B B;
};

b=b(*a)
应该重新初始化
b
(注意,它的第一次初始化发生在输入构造函数之前),或者您可以重载
=
操作符并执行相同的操作thing@AndyG-初始化在C++中有非常明确的含义,而<>代码> b= b(*a);<代码>不初始化
b
-它分配给它。我编辑了一点问题。我编辑了问题,请看一看。创建了一个函数
MakeAOrDefault
。这很有意义
System(){
  a = make_A();
  if(a==null)
    a = make_default_A();
  b(*a);
}
class System{
public:
  System() : a(make_A()), b(*a) {} // use initializer list for constructor
private:
  // Fix order of members to initialize in correct order.
  std::unique_ptr<A> a;
  B b;
};