std::out_ptr_t<Smart,Pointer,Args...>:: ~out_ptr_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
out_ptr_t::~out_ptr_t
|
||||
| Non-member functions | ||||
|
~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
の特殊化である場合、実装はコンストラクタで新しい制御ブロックのストレージを割り当てる可能性があり、これにより非スロー処理をデストラクタに任せることができます。
値によってキャプチャされた引数は、リセット後に破棄されます。