Что я могу сделать с перемещенным объектом?

Стандарт точно определяет, что я могу делать с объектом после его перемещения? Раньше я думал, что все, что вы можете сделать с перемещенным объектом - это уничтожить его, но этого будет недостаточно.

Например, возьмите шаблон функции 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 потерпят неудачу , Так что еще я могу сделать с перемещенными объектами? Где именно я могу найти эти детали в стандарте?

(Кстати, почему в строке 1 вместо T c(std::move(a)); указано [113]?)

136
задан fredoverflow 11 August 2011 в 14:19
поделиться