new_destroying_delete_t — 파괴하는 delete

new_destroying_delete_t — 파괴하는 delete (Destroying delete)

new_destroying_delete_t는 **파괴하는 delete(destroying delete)**를 구현하는 데 쓰이는 태그 타입이에요. C++20에서 도입됐어요.

일반적인 operator delete는 "객체 파괴 → 메모리 해제" 순서를 컴파일러가 제어하는 반면, destroying delete는 개발자가 소멸자 호출 시점을 직접 제어할 수 있게 해줘요.

출처: cppreference

본문

데이터 원문은 [[cpp/memory/new/destroying_delete]]로 리다이렉트되는 페이지예요. 내용은 파괴하는 delete에 관한 표준 기능을 담아요.

destroying delete의 핵심은 사용자 정의 operator delete가 소멸자 호출까지 담당하는 형태예요. 이는 delete 시점에 소멸자를 직접 호출할 수 있게 해서, 특수한 수명 관리나 커스텀 정리를 가능하게 해요.

#include <new>

struct Widget {
    // destroying delete: delete 시점을 직접 제어
    static void operator delete(Widget* ptr, std::destroying_delete_t) {
        // 원하는 정리 후
        ptr->~Widget();        // 소멸자 직접 호출
        // 메모리 해제
        ::operator delete(ptr);
    }
};

특징

  • operator delete의 두 번째 매개변수로 std::destroying_delete_t를 받아요.
  • 이때 delete p는 (컴파일러가 소멸자를 먼저 호출하는 대신) 이 operator delete만 호출해요. 개발자가 소멸자 호출을 직접 해야 해요.
  • 커스텀 정리, 객체 수명을 연장하거나 특수 해제 경로가 필요할 때 유용해요.
  • C++20부터 지원되는 고급 기능이에요.
// 사용은 일반 delete와 동일
Widget* w = new Widget;
delete w;   // destroying delete 호출

destroying delete는 객체 삭제 과정을 세밀하게 제어해야 하는 고급 메모리 관리 시나리오에 쓰여요. 대부분의 일반 코드에서는 필요하지 않고, 커스텀 풀·특수 정리 로직에서 유용해요.

더 알아보기 (Learn more)

cppreference