У каждого объекта есть свой собственный адрес. Поскольку bar
и retVal
- разные объекты, у них разные адреса. Перемещение не изменяет адрес объекта.
. Что такое перемещение, это позволяет перемещать кишки объекта с одного объекта на другой. В зависимости от того, как создается класс, это может быть очень большим повышением производительности. Например, если у нас есть класс, подобный std::vector
, он будет иметь указатель на него в выделенном хранилище. Перемещение позволяет просто скопировать указатель и размер с перемещенного объекта с перемещенного на объект. Затем вы просто устанавливаете указатель в перемещенном объекте на нулевой указатель и задаете размер 0. Теперь нам не нужно было копировать какие-либо элементы или выделять какое-либо хранилище, которое нам пришлось бы делать, если бы мы делали копию вместо .
MyOtherClass
, и вместо того, чтобы копировать содержимое один за другим, я просто копирую указатель и предотвращаю вызов деструктора? – corsel 13 July 2018 в 16:54~MyOtherClass
, в котором его указатели-члены -delete[]
d. После выхода он выходит из сферы видимости, что теперь? Компилятор видит, что выходит из области видимости, содержимое перемещается, заканчивается вызов деструктора? – corsel 13 July 2018 в 17:01std::nullptr
, тоdelete
иdelete[]
станут нерабочими. – NathanOliver 13 July 2018 в 17:17