Гарантируется ли, что unique_ptr сохранит nullptr после перемещения?

StackOverflow https://stackoverflow.com//questions/24061767

Вопрос

Является 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 ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top