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
オブジェクトをリセットします。
コンストラクタによって呼び出されない場合、適応された
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値に更新しなかった | 更新する |