String&&并不是指“引用的引用”,也不存在“引用的引用”这种东西。String&& 和 String&是两码事。
String&&是C++11中的特性,叫做“右值引用”。它只能绑定到右值,即临时对象或将销毁的对象。因此可以把String&&所引用的资源强制拿来使用,且不用重新分配空间。即把String&&所引用对象的资源复制给*this。
例子:
String& operator=(String&& rhs)
{
swap(rhs);
return *this;
}
String(String&& rhs)
: data_(rhs.data_)
{
rhs.data_ = nullptr;
}
String用=赋值时,将rhs赋给*this。或是构造函数中将rhs.data_赋给this.data_,然后将其置空。
这种赋值运算符叫做“移动赋值运算符”,这种构造函数叫做“移动构造函数”。顾名思义,不同于以往的复制一份赋给新对象。而是直接通过“移动”的方式赋给新对象。这样的话效率会更高一点。