移动构造函数

c++支持移动而非拷贝一个对象的能力。在很多情况下我们都会拷贝一个对象,对象在拷贝后就立即销毁了。这种情况下使用移动会大幅度提升性能。

什么是移动

移动一个对象就是直接将它使用的内存交由另一个对象使用。类似于用一个指针指向另一个指针指向的对象,不同的是移动后的对象只支持赋新值和销毁操作,不能再依赖于之前的值。

右值引用

了解移动之前我们必须了解什么是右值引用(&&),右值引用就是必须绑定到右值的引用。右值引用有一个重要的性质–只能绑定到一个将要销毁的对象。右值引用有和左值引用相反的绑定特性,右值引用可以绑定到要求转换的表达式字面常量或是返回右值的表达式。

int i=0;
int &&r1=i; //错误,不能绑定到左值
int &&r2=100;//正确,可以绑定到字面常量
int &&r3=i*42;//正确,可以绑定到返回右值的表达式

因为右值引用只能绑定到临时对象,我们可以从绑定到右值引用的对象窃取“状态”。使用右值引用的代码可以自由接管所引用对象的资源。

move函数介绍

虽然我们不能将右值直接绑定到一个左值上,但我们可以使用标准库函数move来将一个左值显式的转换成一个右值引用类型。

int &&r4=std::move(i);

调用move代表告诉编译器,我们希望像一个右值一样使用它。所以在对象调用move函数后,我们不能在使用它的值,只能对它赋予一个新的值,或者销毁它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值