首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移动operator=和复制operator=的区别

移动operator=和复制operator=的区别
EN

Stack Overflow用户
提问于 2015-09-12 20:07:26
回答 2查看 1K关注 0票数 1

请考虑以下代码:

代码语言:javascript
复制
#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还存在吗?

EN

回答 2

Stack Overflow用户

发布于 2015-09-12 20:23:07

你的问题“是否更有效地使用移动作业”是一种倒退。当移动分配()更有效时,使用移动赋值。

如果您认为可以实现“更好”的移动分配--复制分配,则可以添加另一个运算符。

如果像在您的示例中一样,您发现很难优化复制int的操作,则不必费心移动。

票数 2
EN

Stack Overflow用户

发布于 2015-09-12 20:33:08

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

移动构造器移动构造函数的目的是尽可能快地从原始对象中窃取资源,因为原始对象不再需要有意义的值,因为无论如何,它都会被销毁(有时会被分配给)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32543215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档