C++11移动构造函数和赋值运算符
C++11 move constructor and assignment operator
关于移动语义的隐式使用的一个相对简单的问题
当我们有时
A func();
以下代码:
A a;
a = func();
将调用A的默认构造函数,然后调用A的复制构造函数来创建/返回临时,然后调用复制赋值运算符将其分配给对象A。
如果已经为a定义了移动构造函数和移动赋值,那么在要创建的临时/重新值的最后一条语句中实际调用的是什么?它会是复制构造函数然后是移动赋值吗?
创建临时构造函数是用move构造函数完成的,如果有,并且返回值可以被视为右值,否则是复制构造函数。如果函数适用于返回值优化,则可能会忽略此项。
如果存在移动分配运算符,则使用移动分配运算符来分配给a
,否则使用复制分配运算符。这是因为临时值是右值。
相关文章:
- 复制构造函数、赋值运算符C++
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 为用户定义的类正确调用复制构造函数/赋值运算符
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 非模板 std::reference_wrapper赋值运算符和模板构造函数
- 复制构造函数和赋值运算符的值类实现
- 在C++中,我可以在定义自己的复制构造函数后跳过定义赋值运算符吗?
- 为什么我的类工作正常,即使在返回垃圾值作为赋值运算符和空复制构造函数的返回之后
- 禁止复制构造函数和赋值运算符singleton类
- 复制构造函数和复制赋值运算符是否应具有相同的语句?
- 重载赋值运算符函数和复制构造函数中的错误
- 构造函数中的赋值运算符
- 为什么定义移动构造函数会删除移动赋值运算符
- 为什么可以使用已删除的移动构造函数和赋值运算符移动对象?
- 模板的赋值运算符(成员函数)实现的正确语法
- 错误的数组初始化与赋值副本构造函数初始化
- 赋值复制构造函数
- 赋值给构造函数中的常量变量
- 成员初始化列表vs赋值/复制构造函数(在boost deadline_timer中)
- 将传递的对象赋值给构造函数中的成员对象