Namespaces
Variants

std::out_ptr_t<Smart,Pointer,Args...>:: ~out_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)
~out_ptr_t ( ) ;
(C++23以降)

修正された Pointer オブジェクトの値(または void * オブジェクト、もし operator void ** ( ) が呼び出された場合)と捕捉された引数によって、適応された Smart オブジェクトをリセットします。

以下を定義する

  • s は適応された Smart オブジェクトを表します、
  • args... は捕捉された引数を表します、
  • p は格納された Pointer の値、または static_cast < Pointer > ( * operator void ** ( ) ) が呼び出された場合のその値を表します、
  • SP は以下とします
    • Smart :: pointer 、有効かつ型を表す場合、それ以外の場合、
    • Smart :: element_type * Smart :: element_type が有効かつ型を表す場合、それ以外の場合、
    • std:: pointer_traits < Smart > :: element_type * std:: pointer_traits < Smart > :: element_type が有効かつ型を表す場合、それ以外の場合、
    • Pointer

もし s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) が適正な形式であれば、デストラクタは実行します

if ( p ) s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) ; ,

そうでなければ、 std:: is_constructible_v < Smart, SP, Args... > true の場合、デストラクタは以下を実行する

if ( p ) s = Smart ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) ; ,

そうでない場合、プログラムは不適格(ill-formed)となります。

注記

Smart std::shared_ptr の特殊化である場合、実装はコンストラクタで新しい制御ブロックのストレージを割り当てる可能性があり、これにより非スロー処理をデストラクタに任せることができます。

値によってキャプチャされた引数は、リセット後に破棄されます。