std::out_ptr_t<Smart,Pointer,Args...>::~out_ptr_t
来自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 合法并代表类型,否则为
-
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)...); ,
否则程序非良构。
注解
若 Smart
是 std::shared_ptr 的特化,则实现可以在构造时分配重设新的控制块的存储,以将不抛出的工作留给析构函数。
在重设后销毁按值捕获的实参。