move std 函数 示例_C++性能优化利器:std::move()

C++11的标准库 提供了一个非常有用的函数 std::move(),std::move() 函数将一个左值强制转化为右值引用,以用于移动语义。
 
移动语义,允许直接转移对象的资产和属性的所有权,而在参数为右值时无需复制它们。
 
换一种说法就是,std::move() 将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。
 
因此,通过std::move(),可以避免不必要的拷贝操作。
 
应用举例
 
比如创建一个临时对象,传递给某个函数,这中间是有一次拷贝的。临时对象拷贝到函数里的对象后,临时对象就销毁了。如果临时对象里有一些动态资源,也必须要拷贝一份。
 
但这是毫无意义的,因为临时对象拷完就不用了,不如直接把临时对象的资源掏出来直接使用。
 
这就需要区分临时对象是否可以这样使用,因为有些对象在其他地方也会被使用,不能随意更改。右值引用就是让函数知道是不是临时对象的标记,这就是std::move()的作用。
 
比如下面这个例子,原str(lvalue值)被moved from之后值被转移,所以为空字符串。
 
#include
#include
#include
using namespace std;
 
int main()
{
    string str = "hello";
    cout << "before str: " << str << endl;
 
    vector vstr;
    vstr.emplace_back(std::move(str));
    cout << "after  str: " << str << endl;
 
    return 0;
}
 
 
运行结果为:
 
C++性能优化利器:std::move()

 
若去掉std::move(),运行结果为:
 
C++性能优化利器:std::move()
 
std::move() 将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝,所以可以提高效率,改善性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值