~inout_ptr_t(); // (1) C++23
constexpr ~inout_ptr_t(); // (1) C++26
概要
指定したSmart型スマートポインタが管理するリソースを解放し、レガシーC関数呼び出しにより取得されたポインタ値を格納する。
スマートポインタのリソース解放には、Smart::release()メンバ関数が利用される。
スマートポインタへのポインタ値格納には、Smart::reset()メンバ関数、もしくはSmartオブジェクト構築+ムーブ代入operator=が利用される。
効果
説明用のSP型を下記の通り定義する :
Smart::pointerが有効な型名であればSmart::pointer- そうでなければ、
Smart::element_type*が有効な型名であればSmart::element_type* - そうでなければ、
pointer_traits<Smart>::element_type* - そうでなければ、
Pointer
説明用の文release-statementを下記の通り定義する :
- コンストラクタで
s.release()を呼び出さない実装であれば、s.release() - そうでなければ、空文
説明用メンバ変数s, a, pを用いて、以下と同じ効果を持つ :
-
is_pointer_v<Smart>がtrueならば、apply([&](auto&&... args) { s = Smart(static_cast<SP>(p), std::forward<Args>(args)...); }, std::move(a)); -
式
s.reset(static_cast<SP>(p), std::forward<Args>(args)...)が適格ならば、if (p) { apply([&](auto&&... args) { release-statement; s.reset(static_cast<SP>(p), std::forward<Args>(args)...); }, std::move(a)); } -
is_constructible_v<Smart, SP, Args...>がtrueならば、if (p) { apply([&](auto&&... args) { release-statement; s = Smart(static_cast<SP>(p), std::forward<Args>(args)...); }, std::move(a)); } -
そうでなければ、プログラムは不適格となる。
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??