std::out_ptr_t<Smart,Pointer,Args...>::~out_ptr_t
From cppreference.com
| ~out_ptr_t(); |
(C++23から) | |
変更されたPointerオブジェクトの値(または、operator void**()が呼び出された場合はvoid*オブジェクト)とキャプチャされた引数によって、アダプトされたSmartオブジェクトをリセットします。
以下とする:
-
sはアダプトされたSmartオブジェクトを表します。 -
args...はキャプチャされた引数を表します。 -
pは格納されているPointerの値、またはoperator void**が呼び出された場合は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が有効で型を示す場合)です。
-
ポインタ.
もしs.reset(static_cast<SP>(p), std::forward<Args>(args)...)がwell-formedであれば、デストラクタは以下を実行します。
- 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の特殊化である場合、実装はコンストラクタで新しい制御ブロックのストレージを割り当てる可能性があり、デストラクタに例外を投げない処理を残すことができます。
値によってキャプチャされた引数は、リセット後に破棄されます。