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

< cpp‎ | memory‎ | unique ptr

~unique_ptr(); |  | (C++11 起)

若 `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