Wird unique_ptr
garantiert nullptr
nach dem Umzug gespeichert ?
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
quelle
quelle
::move
ein Element verbleibt, nicht spezifiziert. Ich glaube auch nicht, dass es eine Garantie für das Ende des Smart Pointers gibt. Das heißt, ich überlasse es den CPP-Experten zu antworten :)unique_ptr
std::unique_ptr::operator:
undstd::unique_ptr::release
.Antworten:
Ja, Sie können es
nullptr
nach dem vergleichenmove
und es wird garantiert gleich verglichen.Aus §20.8.1 / 4 [unique.ptr]
(Das
p
Element wurde früher beschrieben als - ein eindeutiger Zeiger ist ein Objektu
, das einen Zeiger auf ein zweites Objekt speichertp
)quelle
p2{std::move(p1)}
bewegt sichp2
ausp1
. Dies ist die beantragte Eigentumsübertragung in dem oben zitierten Text. Die Implementierung des Verschiebungskonstruktors stellt sicher, dass alle Nachbedingungen erfüllt sind.Ja. Aus C ++ 2011 Standard Abschnitt 20.7.1 / 4 :
quelle