如何复制构造函数和移动构造函数

时间:2018-04-13 13:45:01

标签: c++ copy-constructor move-semantics

我的问题是要了解这两个构造函数究竟是如何工作的。 我有这门课:

class moveClass
{
  int variabile;
  public:
  moveClass(){} 
      //move constructor
  moveClass(moveClass && arg)
  {
    cout<<"Call move constructor"<<endl;
    variabile = arg.variabile;
  } 
      //copy constructor
  moveClass(const moveClass & arg)
  {
    cout<<"Call copy constructor"<<endl;
    variabile = arg.variabile;
  }  
};

据我所知,当我实例化这个类的新对象时,会根据参数的类型调用构造函数。

移动构造函数的优点是当rvalue用于实例化对象时,该对象不会被复制,而只是被移动。

1 moveClass a;
2 moveClass b = a;
3 moveClass c = std::move(a);

考虑到这个例子,我可以说当我实例b时,a被复制,然后分配给b?

换句话说,直到第2行,我将在内存中有3个对象: a,b和a_copy。

虽然第3行只是创建c对象而没有新的复制对象。

基本上在这三行的末尾,我将在内存中有4个对象。 这是对的吗?

构造函数的代码也是一样的,所以我希望唯一的区别是传递的参数的类型。

1 个答案:

答案 0 :(得分:2)

  

换句话说,直到第2行,我将在内存中有3个对象:a,b和a_copy。

没有

moveClass b = a;

相同
moveClass b(a);

因此,调用了b的复制构造函数,您直接将成员从a复制到b,不会生成临时(复制)。

最后,您只构建了3个对象abc