Принимая следующий код:
T* t = new T();
std::unique_ptr<T> p1(t);
std::unique_ptr<T> p2(t);
Очевидно, что теперь два std::unique_ptr
s указывают на один и тот же объект. Это состояние само по себе уже неопределенное поведение? Я не смог найти подходящих подсказок в стандарте, поэтому пока отвечу «нет», но хочу быть уверен.
Примечание: этот вопрос не о неопределенном поведении, полученном двойным удалением позжеon, чего можно избежать, если один из указателей release()
в нужное время введет его содержимое ...