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 ( ) ;
(начиная с C++11)
(constexpr начиная с C++23)

Если get() == nullptr , эффекта нет. В противном случае принадлежащий объект уничтожается с помощью get_deleter() ( get() ) .

Требует, чтобы get_deleter()(get()) не выбрасывал исключения.

Примечания

Хотя std::unique_ptr<T> с удалителем по умолчанию может быть создан с неполным типом T , тип T должен быть полным в точке кода, где вызывается деструктор.

Пример

Следующая программа демонстрирует использование пользовательского удалителя.

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

Вывод:

not empty
[deleter called]
empty