Est unique_ptr
garanti pour stocker nullptr
après le déménagement?
std::unique_ptr<int> p1{new int{23}};
std::unique_ptr<int> p2{std::move(p1)};
assert(!p1); // is this always true?
Oui, vous pouvez le comparer à nullptr
après le move
et il est garanti de comparer égal.
De §20.8.1/4 [unique.ptr]
De plus,
u
peut, sur demande, transférer la propriété à un autre pointeur uniqueu2
. À l'issue d'un tel transfert, les conditions suivantes sont remplies:
-u2.p
est égal au pré-transfertu.p
,
-u.p
est égal ànullptr
, et
...
(le membre p
est décrit plus haut comme - un pointeur unique est un objet u
qui stocke un pointeur sur un deuxième objet p
)
Oui. De la section standard C++ 2011 20.7.1/4:
De plus, u peut, sur demande, transférer la propriété vers un autre pointeur unique u2. À la fin d'un tel transfert, les postconditions suivantes détiennent [...] [la source unique_ptr] est égale à nullptr ...