std::out_ptr_t<Smart,Pointer,Args...>::~out_ptr_t
~out_ptr_t();
通过修改后的 Pointer 对象的值(或在调用 void*
对象后调用 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 的特化,则实现可以在构造时为新的控制块分配存储,以便在析构函数中执行非抛出操作。
按值捕获的参数在重置后销毁。