C++11 引入了移动语义,它允许在不进行额外拷贝的情况下将资源从一个对象转移到另一个对象。这可以提高性能,特别是在处理大型对象或临时对象时。移动语义主要涉及到两个关键概念:右值引用和移动构造函数。
int a = 42;
int&& rvalue_ref = a; // 右值引用
class MyClass {
public:
MyClass(MyClass&& other); // 移动构造函数
};
当使用移动语义时,编译器会自动选择合适的移动构造函数或移动赋值运算符来避免不必要的拷贝。例如:
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = std::move(vec1); // 使用移动构造函数,避免拷贝
总之,C++移动语义通过引入右值引用和移动构造函数,允许在不进行额外拷贝的情况下将资源从一个对象转移到另一个对象,从而提高程序的性能。