命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | memory‎ | 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 起)
(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