Я понял, что вызов функции-члена в содержимом перемещенного объекта std::unique_ptr
является неопределенным поведением. Мой вопрос: если я позвоню .get()
на unique_ptr и , то переместите его, будет ли указатель оригинала .get()
указывать на содержимое оригинального уникального указателя?Является ли содержимое указателя на содержимое unique_ptr действительным после перемещения unique_ptr?
Другими словами,
std::unique_ptr<A> a = ...
A* a_ptr = a.get();
std::unique_ptr<A> a2 = std::move(a);
// Does *a_ptr == *a2?
Я думаю, что это делает, но я хочу, чтобы убедиться.
(«содержание», вероятно, не то слово. Я имею в виду данные, которые вы получаете, когда вы разыменования указателя)
Объект, расположенный за этим указателем, не уничтожается. И адрес объекта не может измениться. Таким образом, адрес, который у вас есть, должен быть действительным. – Columbo
@ drescherjm Нет, после переезда первый unique_ptr ничего не владеет. – juanchopanza
Я вижу сейчас. Я ошибочно считал, что a_ptr использовался в движении (что для меня не имело смысла - нужно было внимательно прочитать). – drescherjm