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
对象值(若已调用
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
的特化版本,实现时可能会在构造过程中为新的控制块分配存储空间,以便将非抛出操作留给析构函数处理。
通过值捕获的参数在重置后会被销毁。