new_destroying_delete

new_destroying_delete (std::destroying_delete_t)

<new> 헤더에 정의되어 있어요. operator delete의 destroying delete 형태를 식별하는 데 쓰는 태그 타입이에요. C++20부터 도입됐어요.

출처: cppreference

본문

struct destroying_delete_t { explicit destroying_delete_t() = default; };   // (1) since C++20

inline constexpr destroying_delete_t destroying_delete{};   // (2) since C++20

operator delete의 destroying delete 형태를 식별하는 데 쓰는 태그 타입이에요. 일반 delete 형태와 달리 destroying delete에서는 소멸자가 호출되기 전에 delete 함수가 호출돼요.

struct alignas(64) S
{
    // destroying delete 형태
    void operator delete(S* p, std::destroying_delete_t)
    {
        // p 의 소멸자가 아직 호출되지 않음
        std::allocator<S> a;
        a.deallocate(p, 1);
    }
};

destroying delete는 소멸자가 아닌 delete 함수가 객체의 메모리를 해제하고, 필요하면 소멸자를 직접 호출할 수 있게 해줘요. 이를 통해 커스텀 정렬 배열 해제나 부분 파괴 같은 고급 기법이 가능해져요.

더 알아보기 (Learn more)

cppreference