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 起)
(自 C++23 起为 constexpr)

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