一、对象移动概述
C++11标准引入了“对象移动”的概念
对象移动的特性是:可以移动而非拷贝对象
在C++旧标准中,没有直接的方法移动对象。因此会有很多不必要的资源拷贝
标准库容器、string、share_ptr类既支持移动也支持拷贝。IO类和unique_ptr类可以移动但不能拷贝
对象移动的特点
在很多情况下会发生对象拷贝的现象,对象拷贝之后就被销毁了,在这种情况下,对象移动而非对象拷贝会大幅度提升性能
使用移动而非拷贝的另一个原因是:类似于IO类或unique_ptr这样的类,这些类都不能被共享资源(如指针或IO缓冲)。因此,这些类型的对象不能拷贝但可以移动
二、右值引用(&&)
为了支持移动操作,C++11标准引入了新的引用类型——右值引用
所谓右值引用就是必须绑定到右值的引用。我们通过&&而不是&来获得右值引用
右值有一个很重要的性质:只能绑定到一个将要销毁的对象
左值引用(&)
“引用(reference)”类型介绍参阅:
为了与“右值引用”区别开来,我们本篇文章中将“”引用(referenceÿ