Гарантируется ли, что unique_ptr сохранит nullptr после перемещения?
-
26-12-2019 - |
Вопрос
Является unique_ptr
гарантированно хранить nullptr
после переезда?
std::unique_ptr<int> p1{new int{23}};
std::unique_ptr<int> p2{std::move(p1)};
assert(!p1); // is this always true?
Решение
Да, вы можете сравнить это с nullptr
после move
и гарантированно сравниваются равные.
От §20.8.1/4 [unique.ptr]
Кроме того,
u
может по запросу передать право собственности на другой уникальный указательu2
.По завершении такого переноса выполняются следующие постусловия:
—u2.p
равен предварительному трансферуu.p
,
—u.p
равноnullptr
, и
...
(член p
описано ранее как — уникальный указатель - это объект u
который хранит указатель на второй объект p
)
Другие советы
Да.От стандартного раздела C ++ 2011 20.7.1 / 4 :
Дополнительно вы можете по запросу передавать владение другим уникальным указателем U2.По завершении Такая передача, следующие поступления Hold [...] [Источник Unique_ptr] равен NULLPTR ...