Namespaces
Variants

std::inout_ptr_t<Smart,Pointer,Args...>:: operator Pointer*, std::inout_ptr_t<Smart,Pointer,Args...>:: operator void**

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
std::inout_ptr_t
Member functions
inout_ptr_t::operator Pointer* inout_ptr_t::operator void**
Non-member functions
operator Pointer * ( ) const noexcept ;
(1) (C++23부터)
operator void ** ( ) const noexcept ;
(2) (C++23부터)

Pointer 또는 void * 객체의 주소를 외부 함수에 노출합니다. 일반적으로 이 함수는 해당 값이 나타내는 소유권을 해제한 후 다시 초기화합니다.

1) 저장된 * this Pointer 객체의 주소로 변환합니다.
2) * this void * 객체의 주소로 변환합니다. 이 변환 함수는 Pointer void * 와 동일하지 않은 경우에만 오버로드 해결에 참여하며, Pointer 가 포인터 타입이 아닌 경우 프로그램의 형식이 잘못됩니다.
void * 객체의 초기값은 저장된 Pointer 객체의 값을 void * 로 변환한 값과 동일하며, 이를 수정하면 소멸자 에서 사용되는 Pointer 값에 영향을 미칩니다. * this 의 수명 범위를 벗어나서 void * 객체에 접근하는 것은 정의되지 않은 동작을 유발합니다.

이 두 변환 함수 중 하나가 inout_ptr_t 객체에 대해 호출된 후에는 다른 함수를 호출해서는 안 되며, 그렇지 않을 경우 동작은 정의되지 않습니다.

목차

매개변수

(없음)

반환값

1) 저장된 Pointer 객체의 주소.
2) 앞서 언급된 요구 사항을 충족하는 void * 객체의 주소.

참고 사항

반환값이 가리키는 객체가 재작성되지 않았다면, 이는 생성 전에 적응된 Smart 객체가 보유한 값과 동일합니다.

일반적인 구현에서, 포인터 타입인 모든 Pointer 의 객체 표현은 void * 의 객체 표현과 호환되며, 따라서 이러한 구현들은 일반적으로 Pointer 객체의 저장 공간 내에 void * 객체를 저장하며, 추가 저장 공간이 필요하지 않습니다:

  • 구현체가 타입 기반 별칭 분석(이는 엄격한 별칭 규칙 에 의존함)을 활성화하는 경우, 적절히 정렬된 std:: byte [ sizeof ( void * ) ] 멤버 하위 객체를 사용할 수 있으며, 두 변환 함수 모두 배열 내에서 암묵적으로 생성된 객체들의 주소를 반환합니다.
  • 그렇지 않은 경우, Pointer 멤버 하위 객체를 두 변환 함수 모두에 사용할 수 있으며, (2) 는 해당 주소를 reinterpret_cast 를 통해 void ** 로 직접 반환할 수 있습니다.

만약 Pointer 가 객체 표현이 void * 와 호환되지 않는 포인터 타입인 경우, (1) (또는 (2) )가 호출되었는지 기록하기 위해 추가적인 bool 플래그가 필요할 수 있습니다.

예제