std::inout_ptr_t<Smart,Pointer,Args...>:: ~inout_ptr_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
inout_ptr_t::~inout_ptr_t
|
||||
| Non-member functions | ||||
|
~inout_ptr_t
(
)
;
|
(自 C++23 起) | |
通过修改后的
Pointer
对象(若已调用
operator
void
**
(
)
则为
void
*
对象)的值及捕获的参数来重置适配的
Smart
对象。若构造函数未调用
release
(
)
,则可能在适配的
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,
- /*do-release*/ 表示:若 构造函数 未调用 release ( ) 则为 s. release ( ) ,否则为空。
如果
Smart
是指针类型,析构函数将执行
- s = static_cast < Smart > ( p ) ; ,且当 sizeof... ( Args ) > 0 时程序非良构;
否则,若 s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) 的表达式合法,则析构函数执行
- /*do-release*/ ; 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
所需的数据结构(例如控制块)分配存储空间,以便将非抛出操作留给析构函数处理。
通过值捕获的参数在重置后会被销毁。
缺陷报告
下列行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 3897 | C++23 | 析构函数未将原始指针更新为null值 | 现已更新 |