std::unique_ptr<T,Deleter>:: ~unique_ptr
From cppreference.net
<
cpp
|
memory
|
unique ptr
C++
Memory management library
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
std::unique_ptr
| Member functions | ||||
|
unique_ptr::~unique_ptr
|
||||
| Modifiers | ||||
| Observers | ||||
| Non-member functions | ||||
|
(C++14)
(C++20)
|
||||
|
(until C++20)
(C++20)
|
||||
|
(C++20)
|
||||
| Helper classes | ||||
|
~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