При реализации перемещений конструкторов и операторов пересылки присваивания часто записывается такой код:
p = other.p;
other.p = 0;
Неявно определенные операции перемещения будут реализованы с помощью кода следующим образом:
p = std::move(other.p);
Что было бы неправильно, потому что перемещение указательной переменной не устанавливает его в null. Почему это? Есть ли случаи, когда мы хотели бы, чтобы операции перемещения оставляли неизменную исходную переменную указателя?
Примечание. Под "перемещением" я имею в виду не только подвыражение std::move(other.p)
, я имею в виду все выражение p = std::move(other.p)
. Итак, почему нет специального правила языка, в котором говорится: "Если правая часть задания является значением x указателя указателя, после присваивания оно имеет значение null".??