对象移动
右值引用基础
在重新分配内存的过程中,旧元素已经不再需要,移动元素到新内存是更合适的方法右值引用。
必须绑定到右值,返回得到的结果也是左值(int&&r2,这个r2是左值)。
std::move(a);可以将左值对象a强行转化成右值,不提供using声明,不要省略std。
移动语义
因为右值即将被销毁,所以可以自由的将所引用的资源移动到另一个对象。
移动构造函数和赋值运算符
只有所有函数成员都可移动时,编译器才会生成合成构造函数,否则强行用=default合成构造函数,编译器会再帮你delete掉。
如果只定义了拷贝构造函数,又传入右值给构造函数,不会合成移动构造而是也用拷贝构造。
引用限定符
成员函数的引用限定符
如果一个成员函数加了引用限定符,具有相同参数列表的所有版本都要有引用限定符(常见于多版本构造函数)。
评论