移动物体怎么办?
标准是否准确定义了对象移动后我可以对其做什么?我曾经认为你用移动物体做的所有事情都会破坏它,但这还不够。
例如,采用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行呢?)
哆啦的时光机
相关分类