右值引用基础

在重新分配内存的过程中,旧元素已经不再需要,移动元素到新内存是更合适的方法右值引用。

必须绑定到右值,返回得到的结果也是左值(int&&r2,这个r2是左值)。

std::move(a);可以将左值对象a强行转化成右值,不提供using声明,不要省略std。

移动语义

因为右值即将被销毁,所以可以自由的将所引用的资源移动到另一个对象。

移动构造函数和赋值运算符


只有所有函数成员都可移动时,编译器才会生成合成构造函数,否则强行用=default合成构造函数,编译器会再帮你delete掉。

如果只定义了拷贝构造函数,又传入右值给构造函数,不会合成移动构造而是也用拷贝构造。

引用限定符

成员函数的引用限定符

如果一个成员函数加了引用限定符,具有相同参数列表的所有版本都要有引用限定符(常见于多版本构造函数)。