Этот фрагмент кода действителен? :
unique_ptr<A> p( new A());
p = nullptr;
То есть я могу назначить nullptr
к unique_ptr
? или не получится?
Я попробовал это с г ++ компилятор и он работал, но как насчет других компиляторов?
Это будет работать.
Из пунктов 20.7.1.2.3 / 8-9 стандарта C ++ 11 о unique_ptr<>
шаблон класса:
unique_ptr& operator=(nullptr_t) noexcept
;Последствия:
reset()
,Постусловие:
get() == nullptr
Это означает, что определение шаблона класса unique_ptr<>
включает в себя перегрузку operator =
который принимает значение типа nullptr_t
(такие как nullptr
) как его правая сторона; в этом пункте также указывается, что назначение nullptr
к unique_ptr
эквивалентно сбросу unique_ptr
,
Таким образом, после этого назначения ваш A
объект будет уничтожен.
Других решений пока нет …