最佳答案
标准是否精确地定义了一旦对象被移动后我可以对它做什么?我曾经认为,对于一个被移动的对象,你所能做的就是销毁它,但这还不够。
例如,使用标准库中定义的函数模板 swap
:
template <typename T>
void swap(T& a, T& b)
{
T c = std::move(a); // line 1
a = std::move(b); // line 2: assignment to moved-from object!
b = std::move(c); // line 3: assignment to moved-from object!
}
显然,必须有可能赋值给 move-from 对象,否则第2行和第3行将失败。那么我还能做什么呢?我到哪里可以在标准中找到这些细节?
(顺便问一下,为什么第1行是 T c = std::move(a);
而不是 T c(std::move(a));
?)