文章目录
一、引言
二、左值和右值
三、深拷贝构造函数
四、右值引用
五、移动构造函数
六、std::move()
七、参考资料
一、引言
移动构造函数是什么?先举个例子,你有一本书,你不想看,但我很想看,那么我有哪些方法可以让我能看这本书?有两种做法,一种是你直接把书交给我,另一种是我去买一些稿纸来,然后照着你这本书一字一句抄到稿纸上。
显然,第二种方法很浪费时间,但这正是有些深拷贝构造函数的做法,而移动构造函数便能像第一种做法一样省时,第一种做法在 C++ 中叫做完美转发。
二、左值和右值
何为左值?能用取址符号 & 取出地址的皆为左值,剩下的都是右值。
而且,匿名变量一律属于右值。
int i = 1; // i 是左值,1 是右值
int GetZero {
int zero = 0;
return zero;
}
//j 是左值,GetZero() 是右值,因为返回值存在于寄存器中
int j = GetZero();
//s 是左值,string(“no name”) 是匿名变量,是右值
string s = string(“no name”);
三、深拷贝构造函数
用 g++ 编译器编译下列代码时记得加上参数 -fno-elide-constructors。
#include
#include
using namespace std;
class Integer {