unique_ptr может взять стоимость nullptr?

Действительно ли этот кодовый фрагмент действителен?:

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

Таким образом, я могу назначить nullptr к unique_ptr ? или это потерпит неудачу?

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

15
nl ja de

1 ответы

It will work.

From Paragraphs 20.7.1.2.3/8-9 of the C++11 Standard about the unique_ptr<> class template:

unique_ptr& operator=(nullptr_t) noexcept;

Effects: reset().

Postcondition: get() == nullptr

This means that the definition of class template unique_ptr<> includes an overload of operator = that accepts a value of type nullptr_t (such as nullptr) as its right hand side; the paragraph also specifies that assigning nullptr to a unique_ptr is equivalent to resetting the unique_ptr.

Таким образом, после этого назначения, ваш объект будет разрушен.

27
добавлено
@Zhen: стандарт не определяет это. Вы могли создать переменную типа nullptr_t , но я сомневаюсь, что необходимо будет когда-либо делать это.
добавлено автор Andy Prowl, источник
Ясно. У BTW, только nullptr есть nullptr_t, это - путь it' s сделанный, isn' t?
добавлено автор Zhen, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest