memory_out_ptr_t

memory_out_ptr_t (std::out_ptr_t)

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

출처: cppreference

본문

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

(C++23부터)

out_ptr_t는 결과를 Pointer*(보통 객체 타입 T에 대해 T**) 또는 void** 매개변수로 출력하는 외부 함수들에 스마트 포인터 같은 타입을 적응시키는 데 사용돼요.

out_ptr_t는 구성 시 추가 인자를 포착하고, 그런 외부 함수가 결과를 쓰는 저장 공간을 제공하며, 마지막으로 결과와 포착된 인자들로 적응된 Smart 객체를 재설정해요.

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

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

inout_ptr_t와 달리 out_ptr_t는 적응된 객체가 보유한 소유권을 해제하지 않아요. 즉 외부 함수가 기존 객체를 해제하지 않고 새 소유권으로 채우는 "out" 패턴에 적합해요.

std::unique_ptr<T> p;
// 외부 함수가 **pp 에 새 객체를 넣으면 p 가 재설정됨
c_api_create_thing(std::out_ptr(p));

더 알아보기 (Learn more)

cppreference