Может ли unique_ptr принимать значение nullptr?

Этот фрагмент кода действителен? :

unique_ptr<A> p( new A());
p = nullptr;

То есть я могу назначить nullptrк unique_ptr ? или не получится?

Я попробовал это с г ++ компилятор и он работал, но как насчет других компиляторов?

17

Решение

Это будет работать.

Из пунктов 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 объект будет уничтожен.

28

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]