std:: get_deleter
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
|
(C++17)
|
||||
|
(
until C++20*
)
|
||||
|
(C++26)
|
||||
|
(C++26)
|
||||
| Non-member functions | ||||
|
get_deleter
|
||||
|
(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) |
|
Definido en el encabezado
<memory>
|
||
|
template
<
class
Deleter,
class
T
>
Deleter * get_deleter ( const std:: shared_ptr < T > & p ) noexcept ; |
(desde C++11) | |
Acceso al
p
's deleter. Si el shared pointer
p
posee un deleter de tipo cv-unqualified
Deleter
(por ejemplo, si fue creado con uno de los constructores que toman un deleter como parámetro), entonces devuelve un puntero al deleter. De lo contrario, devuelve un puntero nulo.
Contenidos |
Parámetros
| p | - | un puntero compartido cuyo deleter necesita ser accedido |
Valor de retorno
Un puntero al deleter poseído o nullptr . El puntero devuelto es válido al menos mientras quede al menos una instancia de shared_ptr que lo posea.
Notas
El puntero devuelto puede sobrevivir al último shared_ptr si, por ejemplo, std::weak_ptr s permanecen y la implementación no destruye el deleter hasta que todo el bloque de control sea destruido.
Ejemplo
Demuestra que el std::shared_ptr deleter es independiente del tipo del shared_ptr .
#include <iostream> #include <memory> struct Foo { int i; }; void foo_deleter(Foo* p) { std::cout << "foo_deleter called!\n"; delete p; } int main() { std::shared_ptr<int> aptr; { // create a shared_ptr that owns a Foo and a deleter auto foo_p = new Foo; std::shared_ptr<Foo> r(foo_p, foo_deleter); aptr = std::shared_ptr<int>(r, &r->i); // aliasing ctor // aptr is now pointing to an int, but managing the whole Foo } // r gets destroyed (deleter not called) // obtain pointer to the deleter: if (auto del_p = std::get_deleter<void(*)(Foo*)>(aptr)) { std::cout << "shared_ptr<int> owns a deleter\n"; if (*del_p == foo_deleter) std::cout << "...and it equals &foo_deleter\n"; } else std::cout << "The deleter of shared_ptr<int> is null!\n"; } // deleter called here
Salida:
shared_ptr<int> owns a deleter ...and it equals &foo_deleter foo_deleter called!
Véase también
|
std::shared_ptr
constructores
(función miembro pública) |
|
|
devuelve el deleter que se utiliza para la destrucción del objeto gestionado
(función miembro pública de
std::unique_ptr<T,Deleter>
)
|