std::shared_ptr::~shared_ptr
De cppreference.com
<tbody>
</tbody>
~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.
Notes
Contrairement à std::unique_ptr, le deleter d'un std::shared_ptr est invoqué même si le pointeur géré est nul.
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.