1、右值引用
1.1 符号:&&
右值引用 有一个重要的性质:只能绑定到一个将要销毁的对象。因此,可以将一个右值引用的资源“移动”到另一个对象中。
“引用”就是一个对象的别名。同样,右值引用 也是一个对象的别名而已。
类型 && 引用名 = 右值表达式;
int && a = 10;
1.2 右值:一切常数、字符、字符串,都是“右值”!!不能放置在“赋值操作符”的左边
1.3 在C++11之前,右值是不能被引用的。如int &a =1; //无法从“int”转化为“int&”。 我们最多只能用常量引用来绑定一个右值。因为规定不允许修改右值。
在C++11中,可以引用右值,使用&&实现:int &&a = 1; //OK.
2、移动构造函数
有些时候,我们没有必要复制对象,只需要移动它们!!
移动构造函数:只是对临时对象(右值)的内存,“变更所有权”。
调用移动构造函数的情况:只有当用一个右值,或者将亡值初始化另一个对象的时候,才会调用移动构造函数。
当传入“临时变量(右值)”时,编译器会调用“移动构造函数”。
说明:遇到这种情况,编译器会很智能的帮你选择类内合适的构造函数去执行,
如果没有移动构造函数,它只能默认的选择 复制(拷贝)构造函数;
如果同时存在移动构造函数和复制构造函数,会优先选择移动构造函数;
【重点】
1、移动构造是C++11标准中提供的一种新的构造方法;
2、移动构造接管源对象,既不会产生额外的拷贝开销,也不会给新对象分配内存空间。提高程序的执行效率,节省内存消耗。
3、移动构造函数的第1个参数:必须是自身类型的右值引用 (不需要是const);