Est-ce que unique_ptr
est garanti pour stocker nullptr
après le déplacement?
std::unique_ptr p1{new int{23}}; std::unique_ptr 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 les deux.
De §20.8.1 / 4 [unique.ptr]
De plus,
u
pouvez, sur demande, transférer la propriété à un autre pointeur uniqueu2
. À la fin d’un tel transfert, les post-conditions suivantes sont détenues:
–u2.p
est égal au pré-transfertup
,
–up
est égal ànullptr
, et
…
(le membre p
est décrit plus haut – un pointeur unique est un object u
qui stocke un pointeur sur un second object p
)
Oui. C ++ 2011 Standard Section 20.7.1 / 4 :
De plus, vous pouvez, sur demande, transférer la propriété à un autre pointeur unique u2. À la fin d’un tel transfert, les postconditions suivantes tiennent […] [la source unique_ptr] est égale à nullptr …