Namespaces
Variants

std::inout_ptr_t<Smart,Pointer,Args...>:: ~inout_ptr_t

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)
~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 포인터를 갱신하지 않았음 갱신함