std::inout_ptr_t<Smart,Pointer,Args...>::~inout_ptr_t
来自cppreference.com
< cpp | memory | inout ptr t
~inout_ptr_t(); |
(C++23 起) | |
以修改的 Pointer
对象(或若调用了 operator void**() 则为 void* 对象)的值捕获的实参重设适配的 Smart
对象。可能在适配的 Smart
对象上调用 release() ,若构造函数未调用它。
令
-
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 合法并代表类型,否则为
-
Pointer
- /*do-release*/ 代表 s.release() ,若构造函数不调用 release() ,否则为空。
若 Smart
为指针类型,则析构函数进行
- if (p) s = static_cast<Smart>(p); ,而若 sizeof...(Args) > 0 则程序非良构,
否则,若 s.reset(static_cast<SP>(p), std::forward<Args>(args)...) 为良构,则析构函数进行
- if (p) { /*do-release*/; s.reset(static_cast<SP>(p), std::forward<Args>(args)...); } ,
否则,若 std::is_constructible_v<Smart, SP, Args...> 为 true ,则析构函数进行
- if (p) { /*do-release*/; s = Smart(static_cast<SP>(p), std::forward<Args>(args)...); } ,
否则程序非良构。
注解
实现可能在构造时分配 Smart
所需的数据结构(例如控制块)的存储,以将不抛出的工作留给析构函数。
在重设后销毁按值捕获的实参。