Avatar ·

什么是C++11中的移动语义(move semantics)以及为什么需要它?

你好!我刚开始学习C++11,遇到了术语“move semantics”。我大致理解这与性能有关,但在实践中无法弄清楚。 假设我有这样一个类: ```cpp class MyString { public: MyString(const char* str) : data_(new char[strlen(str) + 1]) { strcpy(data_, str); } ~MyString() { delete[] data_; } MyString(const MyString& other) : data_(new char[strlen(other.data_) + 1]) { strcpy(data_, other.data_); } char* data_; }; ``` 我写了一个返回 `MyString` 的函数: ```cpp MyString createHello() { MyString s("Hello, World!"); return s; // 这里发生了什么?复制? } ``` 使用旧的C++03,在从函数返回时会调用拷贝构造函数,它会分配新内存并复制数据。这很昂贵。但我听说在C++11中可以通过某种方式“移动”数据以避免复制。这是如何工作的?什么是rvalue引用和std::move?何时使用它们?