Определяет ли стандарт точно, что я могу делать с объектом после его перемещения? Раньше я думал, что все, что вы можете сделать с перемещенным объектом, - это уничтожить его, но этого было бы недостаточно.
Например, возьмите шаблон 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?)
pop_back
переезжатьvector
. Но вы, конечно, можете узнать, так ли этоempty()
.