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 타입은 소멸자가 호출되는 코드 지점에서 완전한 타입이어야 합니다.

예제

다음 프로그램은 커스텀 삭제자(deleter)의 사용법을 보여줍니다.

#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