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 함수가 객체의 메모리를 해제하고, 필요하면 소멸자를 직접 호출할 수 있게 해줘요. 이를 통해 커스텀 정렬 배열 해제나 부분 파괴 같은 고급 기법이 가능해져요.