std::shared_ptr::~shared_ptr
De cppreference.com
< cpp | memory | shared ptr
~shared_ptr(); | ||
Si *this
possède un objet et est le dernier shared_ptr
à le posséder, l'objet est détruit à l'aide du deleter de ce shared_ptr
.
Une fois le pointeur intelligent détruit, les autres shared_ptr
qui possédaient le même objet que *this
retournerons une valeur pour use_count() qui sera inférieur de un à la valeur précédente.
[modifier]Notes
Contrairement à std::unique_ptr, le deleter d'un std::shared_ptr est invoqué même si le pointeur géré est nul.
[modifier]Exemple
#include <iostream>#include <memory> class Foo {public: ~Foo(){std::cout<<"~Foo called."<<std::endl;}}; int main(){std::shared_ptr<Foo> ptr1(std::make_shared<Foo>());{std::shared_ptr<Foo> ptr2(ptr1);{std::shared_ptr<Foo> ptr3(ptr1); std::cout<<"use_count: "<< ptr1.use_count()<<std::endl;std::cout<<"Deleting ptr3..."<<std::endl;} std::cout<<"use_count: "<< ptr1.use_count()<<std::endl;std::cout<<"Deleting ptr2..."<<std::endl;} std::cout<<"use_count: "<< ptr1.use_count()<<std::endl;std::cout<<"Deleting ptr3..."<<std::endl;}
Résultat :
use_count: 3 Deleting ptr3... use_count: 2 Deleting ptr2... use_count: 1 Deleting ptr3... ~Foo called.