std::shared_ptr<T>::~shared_ptr
De cppreference.com
<tbody>
</tbody>
~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.
Notas
A diferencia de std::unique_ptr, el eliminador de std::shared_ptr se invoca incluso si el puntero gestionado es nulo.
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()
Véase también
Destruye un weak_ptr. (función miembro pública de std::weak_ptr)
|