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

标签 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); 
}

现在我创建了一个设置系统的类:

class System{
public:
  System();
private:
  B b;
  std::unique_ptr<A> a;
}

构造函数是:

System(){
  a = make_A();
  if(a==null)
    a = make_default_A();
  b(*a);
}

显然这是错误的,因为我不能调用 B的构造函数如上面的代码所示,但我不知道该怎么做。我想到的唯一解决方案是使用 std::unique_ptr<B> b;而不是 B b;然后调用b = make<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;
};

关于c++ - 如何在另一个构造函数中调用对象构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41894973/

相关文章:

c++ - 在 Qt 中打印到纸上

c++11 - 无法使用 SFINAE (std::enable_if) 覆盖虚函数

c++ - 为什么 std::inserter 这么慢?

C++创建没有默认构造函数的对象数组

c++ - "Call of overloaded FUNCTION is ambiguous"(转换构造函数 C++)

c++ - 多线程和oop

c++ - 如何在 Linux 中从其源代码安装 libavcodec 和 libavutil

c++ - 有什么想法可以实现简单的 2D 天空吗?

c++ - 如何反转可变参数模板函数的参数顺序?

c++ - 如何初始化一系列不可移动、不可复制的对象?