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 オブジェクトをリセットします。 コンストラクタによって呼び出されない場合、適応された Smart オブジェクトに対して release ( ) が呼び出される可能性があります。

以下を

  • 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
  • /*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 ) ... ) ; } ;

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

注記

実装では、非スロー処理をデストラクタに残すために、データ構造(例えばコントロールブロック)に必要なストレージを構築時に割り当てる可能性があります。

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

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR Applied to Behavior as published Correct behavior
LWG 3897 C++23 デストラクタは生ポインタをnull値に更新しなかった 更新する