std::get_deleter
| Definiert in Header <memory> |
||
| template< class Deleter, class T > Deleter* get_deleter( const std::shared_ptr<T>& p ) noexcept; |
(seit C++11) | |
Zugriff auf den Deleter von p. Wenn der Smart Pointer p einen Deleter vom Typ cv-unqualified Deleter besitzt (z.B. wenn er mit einem der Konstruktoren erstellt wurde, die einen Deleter als Parameter akzeptieren), dann wird ein Zeiger auf den Deleter zurückgegeben. Andernfalls wird ein Nullzeiger zurückgegeben.
Inhalt |
[bearbeiten] Parameter
| p | - | ein Shared Pointer, dessen Deleter zugegriffen werden soll |
[bearbeiten] Rückgabewert
Ein Zeiger auf den besessenen Deleter oder nullptr. Der zurückgegebene Zeiger ist mindestens so lange gültig, wie es mindestens eine shared_ptr-Instanz gibt, die ihn besitzt.
[bearbeiten] Hinweise
Der zurückgegebene Zeiger kann die letzte shared_ptr-Instanz überdauern, wenn zum Beispiel std::weak_ptr-Instanzen verbleiben und die Implementierung den Deleter erst zerstört, wenn der gesamte Kontrollblock zerstört wird.
[bearbeiten] Beispiel
Demonstriert, dass der Deleter von std::shared_ptr unabhängig vom Typ des shared_ptr ist.
#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
Ausgabe
shared_ptr<int> owns a deleter ...and it equals &foo_deleter foo_deleter called!
[bearbeiten] Siehe auch
| std::shared_ptr-Konstruktoren (öffentliche Memberfunktion) | |
| Gibt den Deleter zurück, der zur Zerstörung des verwalteten Objekts verwendet wird (public member function of std::unique_ptr<T,Deleter>) |