std::experimental::scope_exit
来自 cppreference.com
< cpp | experimental
定义在头文件 <experimental/scope> 中 |
||
template< class EF > class scope_exit; |
(库基础 TS v3) | |
类模板 scope_exit
是一个通用的范围保护程序,旨在在退出范围时调用其退出函数。
scope_exit
不是 可复制构造、可复制赋值 或 可移动赋值,但是,如果 EF
满足某些要求,它可能是 可移动构造,这允许将 scope_exit
包装到另一个对象中。
scope_exit
可以是活动的,即在销毁时调用其退出函数,也可以是停用的,即在销毁时不执行任何操作。从退出函数构造后,scope_exit
处于活动状态。
scope_exit
可以通过手动或自动(通过移动构造函数)调用其上的 release() 来变为停用状态。通过使用另一个停用的 scope_exit
进行初始化也可以获得一个停用的 scope_exit
。一旦 scope_exit
停用,它就不能再变为活动状态。
scope_exit
有效地保存了 EF
和一个指示其是否处于活动状态的 bool 标志。
内容 |
[编辑] 模板参数
EF | - | 存储的退出函数的类型 |
类型要求 | ||
-EF 应为
| ||
-调用 std::remove_reference_t<EF> 的左值且不带任何参数应是格式良好的。 |
[编辑] 成员函数
构造一个新的 scope_exit (公共成员函数) | |
如果 scope_exit 处于活动状态,则在退出范围时调用退出函数,然后销毁 scope_exit (公共成员函数) | |
operator= [已删除] |
scope_exit 不可赋值(公共成员函数) |
修改器 | |
使 scope_exit 停用(公共成员函数) |
[编辑] 推导指南
[编辑] 注释
构造具有动态存储持续时间的 scope_exit
可能会导致意外行为。
如果 scope_exit
对象中存储的 EF
引用了其定义函数的局部变量(例如,作为按引用捕获该变量的 lambda),并且该变量用作该函数中的返回值操作数,则该变量可能已在 scope_exit
的析构函数执行时被返回,从而调用退出函数。这会导致意外的行为。
[编辑] 示例
本节不完整 原因:没有示例 |
[编辑] 另请参阅
包装函数对象并在通过异常退出范围时调用它 (类模板) | |
包装函数对象并在正常退出范围时调用它 (类模板) | |
(C++11) |
用于 unique_ptr 的默认删除器 (类模板) |