std::shared_ptr<T>:: ~shared_ptr
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
shared_ptr::~shared_ptr
|
||||
| Modifiers | ||||
| Observers | ||||
|
(C++17)
|
||||
|
(
until C++20*
)
|
||||
|
(C++26)
|
||||
|
(C++26)
|
||||
| Non-member functions | ||||
|
(until C++20)
(until C++20)
(until C++20)
(until C++20)
(until C++20)
(C++20)
|
||||
|
functions
(
until C++26*
)
|
||||
| Helper classes | ||||
|
(C++20)
|
||||
| Deduction guides (C++17) |
|
~shared_ptr
(
)
;
|
||
Si
*
this
possède un objet et qu'il est le dernier
shared_ptr
le possédant, l'objet est détruit via le suppresseur possédé.
Après la destruction, les pointeurs intelligents qui partageaient la propriété avec * this , s'il y en a, rapporteront un use_count() qui est inférieur d'une unité à sa valeur précédente.
Notes
Contrairement à std::unique_ptr , le suppresseur de std::shared_ptr est invoqué même si le pointeur géré est nul.
Exemple
#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'); // afficherait "F) use_count(): 0" }
Sortie :
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()
Voir aussi
détruit un
weak_ptr
(fonction membre publique de
std::weak_ptr<T>
)
|