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++中的应用场景主要是为了提高程序的性能,特别是在处理大量数据或者需要频繁进行资源转移的场景中。