【发布时间】:2018-09-23 21:38:32
【问题描述】:
我的问题是要了解这两个构造函数究竟是如何工作的。 我有这门课:
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;
}
};
据我了解,当我实例化此类的新对象时,会根据参数的类型调用构造函数。
移动构造函数的优点是,当使用右值实例化一个对象时,该对象不会被复制,而只是被移动。
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 个对象。 这是正确的吗?
构造函数的代码也是一样的,所以我希望唯一的区别是传递的参数的类型。
【问题讨论】:
-
使用
int作为被移动的成员会失败,因为它不能被移动,所以生成的代码只会复制它,不会看到任何差异或获得性能。跨度>
标签: c++ copy-constructor move-semantics