C++11引入的移動語義(move semantics)主要應用于以下場景:
std::vector<int> func() {
std::vector<int> vec = {1, 2, 3, 4, 5};
return vec; // 使用移動語義,而不是復制整個向量
}
class BigData {
public:
// ...
private:
int* data;
size_t size;
};
BigData func() {
BigData big_data;
// ... 初始化 big_data
return big_data; // 使用移動語義,避免復制大對象
}
void swap(BigData& lhs, BigData& rhs) {
lhs.swap(rhs); // 調用 BigData 類的成員函數 swap
}
class MyClass {
public:
// 移動構造函數
MyClass(MyClass&& other) noexcept {
// 轉移資源
}
// 移動賦值運算符
MyClass& operator=(MyClass&& other) noexcept {
if (this != &other) {
// 釋放原有資源
// 轉移資源
}
return *this;
}
};
std::vector
、std::string
等)已經實現了移動語義,以提高性能和減少內存開銷。當使用這些容器時,可以利用移動語義來避免不必要的復制。總之,移動語義在C++中的應用場景主要是為了提高程序的性能,特別是在處理大量數據或者需要頻繁進行資源轉移的場景中。