C++11移动构造函数和赋值运算符

C++11 move constructor and assignment operator

本文关键字:赋值运算符 构造函数 移动 C++11      更新时间:2023-10-16

关于移动语义的隐式使用的一个相对简单的问题

当我们有时

A func();

以下代码:

A a;
a = func();

将调用A的默认构造函数,然后调用A的复制构造函数来创建/返回临时,然后调用复制赋值运算符将其分配给对象A。

如果已经为a定义了移动构造函数和移动赋值,那么在要创建的临时/重新值的最后一条语句中实际调用的是什么?它会是复制构造函数然后是移动赋值吗?

创建临时构造函数是用move构造函数完成的,如果有,并且返回值可以被视为右值,否则是复制构造函数。如果函数适用于返回值优化,则可能会忽略此项。

如果存在移动分配运算符,则使用移动分配运算符来分配给a,否则使用复制分配运算符。这是因为临时值是右值