move operator =和copy operator =之间的区别

时间:2015-09-12 20:07:27

标签: c++ copy move-semantics assignment-operator

考虑以下代码:

#include <iostream>
using namespace std;

class A
{
int x;
public:
A () {x=5;}
A (const A & a) {x=a.x;}
A (A && a) {x=move(a.x);}
A & operator= (const A & a) {x=a.x;}
A & operator = (A && a) {x=move(a.x);}

void func () {A a; *this=move(a);}

}; 

int main () {A a; a.func();}

A::func()创建一个A对象,然后使用move *thisoperator=分配给A.移动operator=和复制operator=在该作业中有何区别? 当我想要复制的对象在函数结束时到期时,使用移动赋值运算符(使用move)而不是复制运算符更有效吗? 如果我使用移动赋值运算符,在赋值后仍然存在a吗?

2 个答案:

答案 0 :(得分:2)

您的问题&#34;使用移动分配更有效率#34; 有点倒退。当 更有效时,您可以使用移动分配。

如果您认为可以实施移动分配&#34;更好&#34;复制分配,您可以添加另一个运算符。

如果在您的示例中,您发现很难优化复制int的操作,那么您就不必为移动而烦恼。

答案 1 :(得分:0)

如果复制操作很昂贵(假设你有沉重的成员) - 使用move是有意义的(例如,你可以只复制重型成员的指针)。

  

Move Constructor移动构造函数的目的是尽可能快地从原始对象中窃取尽可能多的资源,因为原始代码不再需要有意义的值,因为它是无论如何都要在一瞬间被摧毁(或有时被分配)。