std::get_deleter
De cppreference.com
| Definido en el archivo de encabezado <memory>
|
||
template< class Deleter, class T > Deleter* get_deleter( const std::shared_ptr<T>& p ) noexcept; |
(desde C++11) | |
Accede al eliminador de p. Si el puntero compartido p posee un eliminador de tipo no calificado-cv Deleter (por ejemplo, si fue creado con uno de los constructores que toman un eliminador como parámetro), entonces devuelve un puntero al eliminador. De lo contrario, devuelve un puntero nulo.
Parámetros
| p | - | Un puntero compartido cuyo eliminador necesita accederse. |
Valor de retorno
Un puntero al eliminador poseído o nullptr. El puntero devuelto es válido mientras quede al menos una instancia de std::shared_ptr que lo posea.
Notas
El puntero devuelto puede sobrevivir al último std::shared_ptr si, por ejemplo, quedan std::weak_ptr y la implementación no destruye el eliminador hasta que el bloque de control completo esté destruido.
Ejemplo
Demuestra que el eliminador de std::shared_ptr es independiente del tipo de std::shared_ptr.
Ejecuta este código
#include <iostream>
#include <memory>
struct Foo { int i; };
void foo_deleter(Foo * p)
{
std::cout << "se llamó a foo_deleter!\n";
delete p;
}
int main()
{
std::shared_ptr<int> aptr;
{
// crear un shared_ptr que posea un objeto Foo y un eliminador
auto foo_p = new Foo;
std::shared_ptr<Foo> r(foo_p, foo_deleter);
aptr = std::shared_ptr<int>(r, &r->i); // ctor de alias
// aptr ahora apunta a un int, pero gestiona todo el objeto Foo
} // r se destruye (no se llamó al eliminador)
// obtener un puntero al eliminador:
if(auto del_p = std::get_deleter<void(*)(Foo*)>(aptr))
{
std::cout << "shared_ptr<int> posee un eliminador\n";
if(*del_p == foo_deleter)
std::cout << "...y es igual a &foo_deleter\n";
} else
std::cout << "¡El eliminador de shared_ptr es nulo!\n";
} // aquí se llamó al eliminador
Salida:
shared_ptr<int> posee un eliminador
...y es igual a &foo_deleter
se llamó a foo_deleter!
Véase también
| Constructores de std::shared_ptr (función miembro pública) | |
| Devuelve el eliminador que se usa para la destrucción del objeto gestionado. (función miembro pública de std::unique_ptr)
|