Si, c'est le principe de unique_ptr. S'il ne faisait pas ça, il n'aurait pas grand chose d'intelligent. Ici, unique_ptr va appeller le destructeur de Foo sur l'objet alloué en interne puis mettre nullptr à la place. Comme l'objet interne "ptr" est aussi un unique_ptr, son destructeur est appelé à son tour, libérant l'entier.
Si, c'est le principe de unique_ptr. S'il ne faisait pas ça, il n'aurait pas grand chose d'intelligent. Ici, unique_ptr va appeller le destructeur de Foo sur l'objet alloué en interne puis mettre nullptr à la place. Comme l'objet interne "ptr" est aussi un unique_ptr, son destructeur est appelé à son tour, libérant l'entier.
Et moi qui croyait avoir trouvé une faille dans les unique_ptr. C'est vrai que si il n'était pas capable de gérer un cas si banal, ils ne mériterait pas l’adjectif intélligent.
Ça n'a rien à voir avec unique_ptr. C'est tout simplement RAII et le destructeur de l'objet. Toutes les variables membres sont détruites par le destructeur de l'objet dans le sens inverse de leur déclaration (et donc de manière récursive).
{
Foo f;
}
// f est détruit et appelle le destructeur de f.ptr
Et
auto f = make_unique<Foo>();
f = nullptr;
// identique
D'ailleurs, unique_ptr peut être configuré pour prendre un deleter en paramètre. Ce qui est particulièrement pratique pour wrapper des lib C.
git is great because Linus did it, mercurial is better because he didn't.
Nuller un objet ayant des pointeurs comme membres
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
git is great because Linus did it, mercurial is better because he didn't.