Перемещает ли задание на перемещение ссылки?

Я не понимаю, может ли назначение перемещения свободно / свободно изменить адрес переменной x и лишить законной силы все хранения указателей и ссылок &Икс.
Я полагаю, что это ложно, потому что назначение перемещения по умолчанию перемещает каждого члена и сохраняет указатель this, но гарантировано ли это?

РЕДАКТИРОВАТЬ: Пример

int x(1), y(2);
int& ref(x);
x = std::move(y);
// ref still valid ?

2

Решение

Перемещение к или от объекта не делает недействительными ссылки или указатели на объект. Адрес обоих объектов остается прежним.

7

Другие решения

Ссылки — это просто альтернативные имена существующим объектам. То есть, x а также ref полностью взаимозаменяемы (хотя я не уверен, если decltype(x) а также decltype(ref) идентичны): когда x изменяется с использованием другого имени ref соответственно увидим то же самое изменение. Точно так же наоборот. То же самое относится и к указателям на объекты.

Аннулирование ссылок и указателей происходит, когда указанная сущность как-то исчезает. Например, когда у вас есть ссылка на элемент в std::vector<T> и емкость вектора изменяется, ссылка становится недействительной, потому что базовый объект удаляется.

Конечно, для вашего примера int с помощью std::move(y) в любом случае довольно бессмысленно: встроенные типы на самом деле не имеют конструкторов перемещения, т. е. эквивалентны копии. Однако даже при использовании типа класса объект и ссылка на него все равно ссылаются на один и тот же объект.

1

По вопросам рекламы [email protected]