std::unique_ptr<T,Deleter>::unique_ptr - cppreference.com ([original](https://en.cppreference.com/w/cpp/memory/unique%5Fptr/unique%5Fptr.html)) (raw)

| ~unique_ptr(); | | (since C++11) (constexpr since C++23) | | ---------------- | | ------------------------------------- |

If get() == nullptr there are no effects. Otherwise, the owned object is destroyed via get_deleter()(get()).

Requires that get_deleter()(get()) does not throw exceptions.

[edit] Notes

Although std::unique_ptr<T> with the default deleter may be constructed with incomplete type T, the type T must be complete at the point of code where the destructor is called.

[edit] Example

The following program demonstrates usage of a custom deleter.

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

Output:

not empty [deleter called] empty