86 votes

Est-ce que unique_ptr garantit le stockage de nullptr après le déplacement ?

Est-ce que unique_ptr garantit le stockage de nullptr après le déplacement ?

std::unique_ptr<int> p1{new int{23}};
std::unique_ptr<int> p2{std::move(p1)};
assert(!p1); // is this always true?

77voto

Praetorian Points 47122

Oui, vous pouvez le comparer à nullptr après la move et il est garanti que la comparaison est égale.

De §20.8.1/4 [unique.ptr]

En outre, u peut, sur demande, transférer la propriété à un autre pointeur unique u2 . Une fois ce transfert effectué, les conditions suivantes s'appliquent :
- u2.p est égale à la valeur de la u.p ,
- u.p est égal à nullptr et
...

(le membre p est décrite plus haut comme - un pointeur unique est un objet u qui stocke un pointeur sur un second objet p )

11voto

Paul Evans Points 8997

Oui. Extrait de la section standard du C++2011 20.7.1/4 :

En outre, u peut, sur demande, transférer la propriété à un autre pointeur unique u2. À l'issue d'un d'un tel transfert, les postconditions suivantes s'appliquent [...] [le pointeur unique source] est égal à nullptr...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X