memory_inout_ptr_t

memory_inout_ptr_t (std::inout_ptr_t)

<memory> 헤더에 정의되어 있어요. 소유권을 Pointer*(보통 객체 타입 T에 대해 T**) 또는 void** 매개변수로 재설정하는 외부 함수들에 스마트 포인터 같은 타입을 적응시키는 데 쓰는 어댑터예요. C++23부터 도입됐어요.

출처: cppreference

본문

template< class Smart, class Pointer, class... Args >
class inout_ptr_t;

(C++23부터)

inout_ptr_t는 소유권을 Pointer*(보통 객체 타입 T에 대해 T**) 또는 void** 매개변수로 재설정하는 외부 함수들에 스마트 포인터 같은 타입을 적응시키는 데 사용돼요.

inout_ptr_t는 구성 시 추가 인자를 포착하고, 그런 외부 함수가 접근하는 결과를 위한 저장 공간을 제공하며, 적응된 Smart 객체가 보유한 소유권을 해제하고, 마지막으로 파괴될 때 결과와 포착된 인자들로 적응된 Smart 객체를 재설정해요.

inout_ptr_t는 다음과 같은 비-정적 데이터 멤버를 가진 것처럼 동작해요.

  • 적응된 객체에 바인딩되는 Smart& 참조
  • 추가로 전달된 인자들을 보관하는 객체(들)

이 어댑터는 주로 외부 C/C++ API가 소유권을 반환하거나 재설정하는 T** 출력 매개변수 패턴을 스마트 포인터로 안전하게 통합할 때 사용돼요. std::out_ptr/std::inout_ptr 헬퍼가 생성자 인자를 추론해줘요.

std::unique_ptr<T> p;
// 외부 함수가 pp 를 통해 새 소유권을 설정
c_api_init_thing(std::inout_ptr(p));
// 함수가 new T 를 *pp 에 넣으면 p 가 재설정됨

더 알아보기 (Learn more)

cppreference