Namespaces
Variants

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

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
~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