名前空間
変種
操作

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

From cppreference.com
< 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以降)
(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
English 日本語 中文(简体) 中文(繁體)