文章目录
- 右值引用
- 定义:
- code:
- 移动赋值
- 定义:
- code (包含自实现类中的6大默认):
- 类对象的移动构造
- 类成员对象的移动构造
右值引用
左值:赋值号左边,可以取地址
- 变量名
- 返回左值引用的函数调用
- 前置自增,前置自减:++i;–i;
- 赋值运算
- …
右值:赋值号右边,不可以取地址;将亡值,通常是将要被移动的对象
- 常量
- 返回非引动类型的函数调用
- 后置自增:i ++
- 算术表达式 (a+b)
- 逻辑表达式(a && b)…
- std::move() 移动的值
- 被右值引用的值
- …
定义:
如,将func() 返回类对象赋值给类A的对象a
A && a = func();
功能:调高使用临时对象的效率
code:
分析:
发生1次构造,1次拷贝构造:
第一次构造为getObjectA()中A()的构造
1次拷贝构造为将A() 赋值给临时对象,
临时对象申请的空间赋值给对象a 没有发生拷贝行为,提高了效率
class A
{public:A(){cout<<"A() "<<this<<endl;}~A(){cout<<"~A() "<<this<<endl;}A(const A &another){cout<<"A(const A&)"<<&another<<"->"<<this<<endl;}
};
A getObjectA()
{return A();
}
int main()
{A && a = getObjectA(); return 0;
}
运行结果:
A()
A(const A&)
~A()
~A()
移动赋值
语义:对象赋值时,避免内存空间的重新分配
定义:
如, 将类A 对象a 移动赋值给 对象b
A b(std::move(a));
功能:提高将类对象返回值赋值给临时对象的效率
code (包含自实现类中的6大默认):
类对象的移动构造
分析:
一次构造,一次移动构造
一次构造为 a对象的构造
移动构造为 将 a 赋值给b, a所申请的空间没有进行拷贝,提高了效率