PHIL / NOTES
← 返回笔记目录
C++ 开发与语法

理解 std::move、右值引用和移动构造

用所有权转移解释移动语义,并避免误用 moved-from 对象。

原理

std::move 本身不会移动任何数据,它把表达式转为可匹配移动重载的形式。真正的资源转移发生在随后调用的移动构造或移动赋值里。

开发中的做法

移动后的标准库对象通常处于有效但未指定的状态。可以销毁或重新赋值,读取原有值则需要查该类型的具体保证。

验证与追问

能直接返回局部对象时写 return value。对同一个局部对象写 return std::move(value) 可能阻止命名返回值优化。

代码片段

std::string source = "hello";
std::string target = std::move(source);
source = "usable again";