std::unique_ptr<T,Deleter>::~unique_ptr
From cppreference.com
< cpp | memory | unique ptr
| ~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