【发布时间】:2011-10-25 01:06:15
【问题描述】:
该标准是否准确定义了一个对象一旦被移出后我可以对它做什么?我曾经认为你可以对移动对象做的所有事情就是破坏它,但这还不够。
以标准库中定义的函数模板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));?)
【问题讨论】:
标签: c++ c++11 variable-assignment swap move-semantics