std::inout_ptr_t<Smart,Pointer,Args...>:: ~inout_ptr_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
inout_ptr_t::~inout_ptr_t
|
||||
| Non-member functions | ||||
|
~inout_ptr_t
(
)
;
|
(C++23부터) | |
수정된
Pointer
객체의 값(또는
void
*
객체가
operator
void
**
(
)
호출된 경우)과 캡처된 인수들로 적응된
Smart
객체를 재설정합니다.
release
(
)
는 생성자에 의해 호출되지 않은 경우 적응된
Smart
객체에서 호출될 수 있습니다.
다음을 가정합니다
-
s는 적응된Smart객체를 나타냅니다, -
args...는 캡처된 인자들을 나타냅니다, -
p는 저장된Pointer값, 또는 static_cast < Pointer > ( * operator void ** ( ) ) ( operator void ** 가 호출된 경우)를 나타냅니다, -
SP는- Smart :: pointer (유효하고 타입을 나타내는 경우), 그렇지 않으면
- Smart :: element_type * ( Smart :: element_type 이 유효하고 타입을 나타내는 경우), 그렇지 않으면
- std:: pointer_traits < Smart > :: element_type * ( std:: pointer_traits < Smart > :: element_type 이 유효하고 타입을 나타내는 경우), 그렇지 않으면
-
Pointer입니다,
- /*do-release*/ 는 생성자 가 release ( ) 를 호출하지 않는 경우 s. release ( ) 를, 그렇지 않으면 빈 값을 나타냅니다.
만약
Smart
가 포인터 타입이라면, 소멸자는 다음을 수행합니다
- s = static_cast < Smart > ( p ) ; , 그리고 sizeof... ( Args ) > 0 인 경우 프로그램은 형식 오류를 가집니다;
그렇지 않으면, s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) 가 올바른 형식이라면, 소멸자는 다음을 수행합니다
- /*do-release*/ ; if ( p ) { s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) ; } ;
그렇지 않고, std:: is_constructible_v < Smart, SP, Args... > 가 true 인 경우, 소멸자는 다음을 수행합니다
- /*do-release*/ ; if ( p ) { s = Smart ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) ; } ;
그렇지 않으면 프로그램이 형식이 잘못됩니다.
참고 사항
구현은 비예외 작업을 소멸자에게 남기기 위해, 생성 시
Smart
에 필요한 데이터 구조(예: 제어 블록)의 저장 공간을 할당할 수 있습니다.
값으로 캡처된 인수들은 재설정 후에 소멸됩니다.
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3897 | C++23 | 소멸자가 null 값으로의 raw 포인터를 갱신하지 않았음 | 갱신함 |