C++11 引入了移動(dòng)語(yǔ)義,它允許在不進(jìn)行額外拷貝的情況下將資源從一個(gè)對(duì)象轉(zhuǎn)移到另一個(gè)對(duì)象。這可以提高性能,特別是在處理大型對(duì)象或臨時(shí)對(duì)象時(shí)。移動(dòng)語(yǔ)義主要涉及到兩個(gè)關(guān)鍵概念:右值引用和移動(dòng)構(gòu)造函數(shù)。
int a = 42;
int&& rvalue_ref = a; // 右值引用
class MyClass {
public:
MyClass(MyClass&& other); // 移動(dòng)構(gòu)造函數(shù)
};
當(dāng)使用移動(dòng)語(yǔ)義時(shí),編譯器會(huì)自動(dòng)選擇合適的移動(dòng)構(gòu)造函數(shù)或移動(dòng)賦值運(yùn)算符來(lái)避免不必要的拷貝。例如:
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = std::move(vec1); // 使用移動(dòng)構(gòu)造函數(shù),避免拷貝
總之,C++移動(dòng)語(yǔ)義通過引入右值引用和移動(dòng)構(gòu)造函數(shù),允許在不進(jìn)行額外拷貝的情況下將資源從一個(gè)對(duì)象轉(zhuǎn)移到另一個(gè)對(duì)象,從而提高程序的性能。