C++26의 std::indirect: PImpl 관용구를 더 간단하고 안전하게
The PImpl idiom and the C++26 std:indirect type
PImpl(pointer to implementation) 관용구는 클래스의 구현 세부 사항을 별도의 클래스로 분리하고 불투명 포인터로 접근하여 인터페이스와 구현을 분리하고 컴파일 타임 의존성을 최소화하는 기법입니다. 이 글에서는 C++에서 PImpl을 구현하는 전형적인 방법(원시 포인터, std::unique_ptr)을 살펴보고, C++26에 도입된 std::indirect가 어떻게 이 관용구의 구현을 단순화하는지 설명합니다. std::indirect는 깊은 복사, const 전파, 절대 null이 아닌 특성(이동 후 상태는 valueless_after_move()로 확인)을 제공하여 기존 방식의 문제점을 해결합니다. 현재 GCC 16에서만 지원됩니다.
std::indirect는 이동된 객체의 상태를 확인할 수 있는 valueless_after_move() 함수를 제공하여, 기존의 null 포인터 검사보다 더 명시적이고 안전한 방법을 제공합니다.