Вы получили «уникальность» std::unique_ptr<T>
в обратном направлении. Не существует такого волшебного механизма, чтобы при создании std::unique_ptr<T>
он каким-то образом проверял все существующие в настоящее время std::unique_ptr<T>
и делал что-то другое, если ему принадлежат одинаковые значения указателя.
Вместо этого предполагается, что вы ранее new
редактировали T *
и строили из него std::unique_ptr<T>
или вызывали std::make_unique<T>
на new
a T
и заключали его в unique_ptr<T>
для тебя. Если это предположение не соответствует действительности, и std::unique_ptr<T>
уничтожен, поведение вашей программы не определено.
Запрет на копирование гарантирует, что delete
называется ровно один раз , и часто без каких-либо дополнительных усилий с вашей стороны (т. Е. Время жизни получателя точно совпадает с временем жизни указателя)