Namespaces
Variants

std::unique_ptr<T,Deleter>:: ~unique_ptr

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
~unique_ptr ( ) ;
(depuis C++11)
(constexpr depuis C++23)

Si get() == nullptr il n'y a aucun effet. Sinon, l'objet détenu est détruit via get_deleter() ( get() ) .

Requiert que get_deleter()(get()) ne lève pas d'exceptions.

Notes

Bien que std::unique_ptr<T> avec le suppresseur par défaut puisse être construit avec un type incomplet T , le type T doit être complet au point du code où le destructeur est appelé.

Exemple

Le programme suivant démontre l'utilisation d'un custom deleter.

#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");
}

Sortie :

not empty
[deleter called]
empty