¿Está unique_ptrgarantizado almacenar nullptrtras mudanza?
std::unique_ptr<int> p1{new int{23}};
std::unique_ptr<int> p2{std::move(p1)};
assert(!p1); // is this always true?
c++
c++11
move-semantics
unique-ptr
lizarisk
fuente
fuente

::movesale un elemento no está especificado. Tampoco creo que haya ninguna garantía en el extremo del puntero inteligente. Dicho esto, dejaré que los expertos del CPP respondan :)unique_ptrstd::unique_ptr::operator:ystd::unique_ptr::release.Respuestas:
Sí, puede compararlo con
nullptrdespués delmovey se garantiza que se comparará igual.De §20.8.1 / 4 [unique.ptr]
(el miembro
pse describió anteriormente como: un puntero único es un objetouque almacena un puntero a un segundo objetop)fuente
p2{std::move(p1)}es mover la construcciónp2dep1. Esa es la transferencia de propiedad solicitada en el texto que cité anteriormente. La implementación del constructor de movimientos se asegurará de que se cumplan todas las condiciones posteriores.Si. De la sección 20.7.1 / 4 estándar de C ++ 2011 :
fuente