请考虑以下代码:
#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还存在吗?
发布于 2015-09-12 20:23:07
你的问题“是否更有效地使用移动作业”是一种倒退。当移动分配()更有效时,使用移动赋值。
如果您认为可以实现“更好”的移动分配--复制分配,则可以添加另一个运算符。
如果像在您的示例中一样,您发现很难优化复制int的操作,则不必费心移动。
发布于 2015-09-12 20:33:08
如果复制操作很昂贵(假设您有大量成员)--使用move(例如,您可以只复制重成员上的指针)是有意义的。
移动构造器移动构造函数的目的是尽可能快地从原始对象中窃取资源,因为原始对象不再需要有意义的值,因为无论如何,它都会被销毁(有时会被分配给)。
https://stackoverflow.com/questions/32543215
复制相似问题