Namespaces
Variants

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

From es.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 ( ) ;
(desde C++11)
(constexpr desde C++23)

Si get() == nullptr no hay efectos. De lo contrario, el objeto poseído es destruido mediante get_deleter() ( get() ) .

Requiere que get_deleter()(get()) no lance excepciones.

Notas

Aunque std::unique_ptr<T> con el deleter por defecto puede ser construido con un tipo incompleto T , el tipo T debe estar completo en el punto del código donde se llama al destructor.

Ejemplo

El siguiente programa demuestra el uso de un eliminador personalizado.

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

Salida:

not empty
[deleter called]
empty