std::out_ptr_t<Smart,Pointer,Args...>:: operator Pointer*, std::out_ptr_t<Smart,Pointer,Args...>:: operator void**
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
out_ptr_t::operator Pointer*
out_ptr_t::operator void**
|
||||
| Non-member functions | ||||
|
operator Pointer
*
(
)
const
noexcept
;
|
(1) | (C++23 이후) |
|
operator
void
**
(
)
const
noexcept
;
|
(2) | (C++23 이후) |
Pointer
또는
void
*
객체의 주소를 외부 함수에 노출하며, 일반적으로 해당 함수가 이를 재초기화합니다.
Pointer
객체의 주소로
*
this
를 변환합니다.
Pointer
가
void
*
와 동일하지 않은 경우에만 오버로드 해결에 참여하며,
Pointer
가 포인터 타입이 아닌 경우 프로그램의 형식이 잘못됩니다.
void * 객체의 초기값은 저장된
Pointer
객체의 값을
void
*
로 변환한 값과 동일하며, 이를 수정하면
소멸자
에서 사용되는
Pointer
값에 영향을 미칩니다.
*
this
의 수명 범위를 벗어나서
void
*
객체에 접근하는 것은 정의되지 않은 동작을 유발합니다.
이 두 변환 함수 중 하나가
out_ptr_t
객체에 대해 호출된 후에는 다른 함수를 호출해서는 안 되며, 그렇지 않을 경우 동작은 정의되지 않습니다.
목차 |
매개변수
(없음)
반환값
Pointer
객체의 주소.
참고 사항
반환값이 가리키는 객체가 재작성되지 않은 경우, 이는 nullptr 와 같습니다.
일반적인 구현에서, 포인터 타입인 모든
Pointer
의 객체 표현은
void
*
의 객체 표현과 호환되며, 따라서 이러한 구현들은 일반적으로
void
*
객체를
Pointer
객체의 저장 공간 내에 보관하며, 추가 저장 공간이 필요하지 않습니다:
- 구현체가 타입 기반 별칭 분석(이는 엄격한 별칭 규칙 에 의존함)을 활성화하는 경우, 적절히 정렬된 std:: byte [ sizeof ( void * ) ] 멤버 하위 객체를 사용할 수 있으며, 두 변환 함수 모두 배열 내에서 암묵적으로 생성된 객체들의 주소를 반환합니다.
-
그렇지 않은 경우,
Pointer멤버 하위 객체를 두 변환 함수 모두에 사용할 수 있으며, (2) 는 해당 주소를 reinterpret_cast 를 통해 void ** 로 직접 반환할 수 있습니다.
만약
Pointer
가 객체 표현이
void
*
와 호환되지 않는 포인터 타입이라면,
(1)
(또는
(2)
)가 호출되었는지 기록하기 위해 추가적인
bool
플래그가 필요할 수 있습니다.
예제
|
이 섹션은 불완전합니다
이유: 예제 없음 |