std::shared_ptr<T>::~shared_ptr
De cppreference.com
< cpp | memory | shared ptr
~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
Ejecuta este código
#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 ) |