我的问题是要了解这两个构造函数的工作原理。
我有这个课:

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;
  }
};

据我了解,当我实例化此类的新对象时,将根据参数的类型调用构造函数。

move构造函数的优点是,当使用右值实例化对象时,该对象不会被复制,而只是被 move 。
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个对象。
这样对吗?

构造函数的代码也相同,因此我希望唯一的区别是传递的参数的类型。

最佳答案



不。

moveClass b = a;

是相同的
moveClass b(a);

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

至此,您仅构建了3个对象abc

10-04 12:35