标准是否准确定义了一个对象一旦被移出我可以做什么?我曾经认为你可以对一个移动的对象做的就是破坏它,但这还不够。
例如,以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!
}
显然,必须可以分配给移动对象,否则第 2 行和第 3 行将失败。那么我还能对移动的对象做什么呢?我究竟在哪里可以找到标准中的这些细节?
(顺便说一句,为什么它T c = std::move(a);
不是T c(std::move(a));
在第 1 行?)