Почему перемещение переменной-указателя не устанавливает для нее значение NULL?

При реализации конструкторов перемещения и операторов присваивания перемещения часто пишут такой код:

p = other.p;
other.p = 0;

Неявно определенные операции перемещения могут быть реализованы с помощью такого кода:

p = std::move(other.p);

Что было бы неверно, поскольку перемещение переменной-указателя делает , а не , установил значение null. Это почему? Есть ли случаи, когда мы хотели бы, чтобы при операциях перемещения исходная переменная-указатель оставалась неизменной?

Примечание: Под «перемещением» я подразумеваю , а не просто подвыражение std :: move ( other.p) , я имею в виду все выражение p = std :: move (other.p) . Итак, почему нет специального языкового правила, которое гласит: «Если правая часть присваивания является указателем xvalue, он устанавливается в ноль после того, как присваивание имело место»?

41
задан fredoverflow 26 February 2012 в 10:55
поделиться