Espacios de nombres
Variantes
Acciones

std::shared_ptr<T>::~shared_ptr

De cppreference.com
< cpp‎ | memory‎ | shared ptr
 
 
Biblioteca de servicios
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
(C++23)
Asignadores de memoria
Recursos de memoria
Almacenamiento no inicializado
Algoritmos de memoria no inicializada
Algoritmos restringidos de memoria no inicializada
Apoyo para recolección de basura
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
Misceláneos
(C++20)
(C++11)
(C++11)
 
 
~shared_ptr();

Si *this posee un objeto y es el último shared_ptr que lo posee, el objeto se destruye a través del eliminador poseído por *this.

Después de la destrucción, los punteros inteligentes que compartían la posesión con *this, si los hubiera, informarán un use_count() que es uno menos que su valor anterior.

[editar]Notas

A diferencia de std::unique_ptr, el eliminador de std::shared_ptr se invoca incluso si el puntero gestionado es nulo.

[editar]Ejemplo

#include <memory>#include <iostream>   struct S { S(){std::cout<<"S::S()\n";} ~S(){std::cout<<"S::~S()\n";}struct Eliminador {void operator()(S* s)const{std::cout<<"S::Eliminador()\n"; delete s;}};};   int main(){auto sp =std::shared_ptr<S>{ new S, S::Eliminador{}};   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'); // imprimiría "F) use_count(): 0"}

Salida:

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

[editar]Véase también

Destruye un weak_ptr.
(función miembro pública de std::weak_ptr)[editar]
close