Namensräume
Varianten
Aktionen

Destruktor von std::unique_ptr<T,Deleter>

Von cppreference.com
< cpp‎ | memory‎ | unique ptr
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
 
~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.

#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