C ++中的简单复制构造函数

时间:2015-12-19 14:02:51

标签: c++ c++11 copy-constructor deep-copy

假设我们在C ++中有两个类:

Class A{
      public:
          A();
      private:
          int k;
};

Class B{
      public:
          B();
      private:
          A a;
};

我编辑了我的问题,以便任何人有一天都可以访问它。

如何使用另一个B a(类型为Class A}来初始化Aa_inst的复制文件? 1}}(让它为12 && 14)之前已经定义并初始化了吗?

换句话说,ctor B()的代码是什么?

2 个答案:

答案 0 :(得分:1)

我会这样做

B(const A &paramA) : a(paramA) {}
B(A &&paramA) : a(move(paramA)) {} 
B(const B &src) : a(src.a) {}

除了复制构造函数之外,我还提出了两个额外的构造函数,一个可以通过A的l值实例初始化,另一个可以用于r值实例。根据A的语义,您可能不需要移动版本。

答案 1 :(得分:0)

Class A{
      public:
          A();
          A(const A& obj);
      private:
          int k;
};

Class B{
      public:
          B();
          B(const B& obj)
             : a(obj.a) { }
          B(const A& obj)
             : a(obj) { }
      private:
          A a;
};