Destruktor von std::unique_ptr<T,Deleter>
Von cppreference.com
< cpp | memory | unique ptr
| ~unique_ptr(); |
(seit C++11) (constexpr seit C++23) |
|
Wenn get() == nullptr, hat dies keine Auswirkungen. Andernfalls wird das verwaltete Objekt über get_deleter()(get()) zerstört.
Voraussetzung: get_deleter()(get()) darf keine Ausnahmen auslösen.
[bearbeiten] Anmerkungen
Obwohl std::unique_ptr<T> mit dem Standard-Deleter mit einem unvollständigen Typ T konstruiert werden kann, muss der Typ T an der Code-Stelle, an der der Destruktor aufgerufen wird, vollständig sein.
[bearbeiten] Beispiel
Das folgende Programm demonstriert die Verwendung eines benutzerdefinierten Deleters.
Führen Sie diesen Code aus
#include <iostream> #include <memory> int main () { auto deleter = [](int* ptr) { std::cout << "[deleter called]\n"; delete ptr; }; std::unique_ptr<int, decltype(deleter)> uniq(new int, deleter); std::cout << (uniq ? "not empty\n" : "empty\n"); uniq.reset(); std::cout << (uniq ? "not empty\n" : "empty\n"); }
Ausgabe
not empty [deleter called] empty