Scroll to navigation

std::shared_ptr::~shared_ptr(3) C++ Standard Libary std::shared_ptr::~shared_ptr(3)

NAME

std::shared_ptr::~shared_ptr - std::shared_ptr::~shared_ptr

Synopsis


~shared_ptr();


If *this owns an object and it is the last shared_ptr owning it, the object is
destroyed through the owned deleter.


After the destruction, the smart pointers that shared ownership with *this, if any,
will report a use_count() that is one less than its previous value.

Notes


Unlike std::unique_ptr, the deleter of std::shared_ptr is invoked even if the
managed pointer is null.

Example

// Run this code


#include <iostream>
#include <memory>


struct S
{
S() { std::cout << "S::S()\n"; }
~S() { std::cout << "S::~S()\n"; }
struct Deleter
{
void operator()(S* s) const
{
std::cout << "S::Deleter()\n";
delete s;
}
};
};


int main()
{
auto sp = std::shared_ptr<S>{new S, S::Deleter{}};


auto use_count = [&sp](char c)
{
std::cout << c << ") use_count(): " << sp.use_count() << '\n';
};


use_count('A');
{
auto sp2 = sp;
use_count('B');
{
auto sp3 = sp;
use_count('C');
}
use_count('D');
}
use_count('E');


// sp.reset();
// use_count('F'); // would print "F) use_count(): 0"
}

Output:


S::S()
A) use_count(): 1
B) use_count(): 2
C) use_count(): 3
D) use_count(): 2
E) use_count(): 1
S::Deleter()
S::~S()

See also


destructor destroys a weak_ptr
(public member function of std::weak_ptr<T>)

2024.06.10 http://cppreference.com