命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | 内存‎ | unique ptr
 
 
内存管理库
(仅作说明*)
未初始化内存算法
(C++17)
(C++17)
(C++17)
受约束的未初始化
内存算法
C 库

分配器
内存资源
垃圾回收支持
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
未初始化存储
(直到 C++20*)
(直到 C++20*)
显式生命周期管理
 
 
~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