Стандартные типы библиотек
От стандартной N4296, §17.6.3.1, давайте rv
быть Rvalue типа T
, в таблице 20, MoveConstructible требования и Таблица 22 MoveAssignable требования.
После операции: состояние
T(rv);
T u =rv;
u = rv;
с.в. не определен [Примечание: с.в. должны по-прежнему соответствовать требованиям компонента библиотеки, которая использует его. Операции, перечисленные в этих требованиях, должны работать как указано независимо от того, был ли rv перемещен из или нет. - примечание окончания)
Это означает, что по крайней мере ваш перемещенный объект все еще находится в допустимом состоянии и может использоваться как любой объект его типа. Но больше ничего не требуется в качестве требования к библиотеке. Вы должны прочитать конкретную документацию.
Для shared_ptr specificaly:
shared_ptr(shared_ptr&& r) noexcept;
template<class Y> shared_ptr(shared_ptr<Y>&& r) noexcept;
Примечание: второй конструктор не должен участвовать в разрешении перегрузки, если Y * не конвертируется до Т *.
Эффекты: Move-constructs экземпляр shared_ptr из r. Постусловия: * это должно содержать старое значение r. r должно быть пустым. r.get() == nullptr.
Основные типы и тривиальным copyables
Двинутый объект должен быть неизменным. Ищу для подтверждения в стандарте ...
Другие типы
По крайней мере, программист класса должен гарантирует, что объект этого класса является разрушаемость после того, как он был перемещен!
http://stackoverflow.com/questions/34772219/which-std-types-are-guaranteed-to-be-empty-null-after-being-used-as-arg-in-move –