右值引用 与 容器
右值引用与移动语义使得容器的效率有了大幅提升。
如果传入的为临时变量,自动识别为右值。(下面的类A中没有指针成员变量,没有体现移动构造函数的好处,只是为了演示过程)
#include <iostream>
#include <vector>
using namespace std;
class A{
public:
int val = 0;
A(int x):val(x) {cout << "构造函数 val = " << val << endl;}
A(const A & a) {
val = a.val;
cout << "赋值构造函数 val = " << val << endl;
}
A(A && a) {
val = a.val;
a.val = 0;
cout << "移动构造函数 val = " << val << endl;
}
~A() {cout << "析构函数 val = " << val << endl;}
};
int main() {
vector<A> vec;
vec.push_back(A(30));
return 0;
}
传入左值:
int main() {
A a1(10);
vector<A> vec;
vec.push_back(a1);
return 0;
}

用std::move()将左值转换为右值传入:
int main() {
A a1(10);
vector<A> vec;
vec.push_back(std::move(a1));
return 0;
}

浙公网安备 33010602011771号