【发布时间】:2015-12-09 04:20:04
【问题描述】:
考虑这段代码:
#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 对象,然后使用移动 operator= 将 *this 分配给 A。在该作业中移动operator= 和复制operator= 有什么区别?
当我要复制的对象将在函数结束时过期时,显式使用移动赋值运算符(使用move)而不是复制运算符是否更有效?
如果我使用移动赋值运算符,赋值后a 是否仍然存在?
【问题讨论】:
-
这不是一个很好的例子,因为移动
int只是复制它,使它们实际上是相同的操作。 -
另外,您在移动构造函数中使用移动赋值,而不是直接移动。您正在移动
int,所以没关系。但这对于其他类型可能很重要,而且无论如何这似乎很奇怪。
标签: c++ copy move-semantics assignment-operator