std::experimental::scope_fail
来自 cppreference.com
< cpp | experimental
定义在头文件 <experimental/scope> 中 |
||
template< class EF > class scope_fail; |
(库基础 TS v3) | |
类模板 scope_fail
是一个通用范围守卫,旨在当范围通过异常退出时调用其退出函数。
scope_fail
不是 可复制构造、可复制赋值 或 可移动赋值,但是,它可能是 可移动构造 如果 EF
满足某些要求,这允许将 scope_fail
包裹到另一个对象中。
scope_fail
可以是活动的,即在析构时调用其退出函数,也可以是未激活的,即在析构时什么也不做。scope_fail
从退出函数构造后是活动的。
scope_fail
可以通过手动或自动 (通过移动构造函数) 在其上调用 release() 变得未激活。也可以通过使用另一个未激活的 scope_fail
初始化来获得一个未激活的 scope_fail
。一旦 scope_fail
未激活,它就不能再变得激活。
scope_fail
有效地保存了一个 EF
和一个 bool 标志,指示它是否处于活动状态,以及一个未捕获异常计数器,用于检测析构函数是否在堆栈展开期间调用。
内容 |
[编辑] 模板参数
EF | - | 存储的退出函数类型 |
类型要求 | ||
-EF 应为
| ||
-使用没有参数的 std::remove_reference_t<EF> 的左值调用应该是良构的。 |
[编辑] 成员函数
构造一个新的 scope_fail (公共成员函数) | |
当范围通过异常退出时调用退出函数,如果 scope_fail 是活动的,则销毁 scope_fail (公共成员函数) | |
operator= [已删除] |
scope_fail 不可赋值(公共成员函数) |
修饰符 | |
使 scope_fail 未激活(公共成员函数) |
[编辑] 推断指南
[编辑] 说明
构造具有动态存储期限的 scope_fail
可能会导致意外行为。
从另一个在不同线程中创建的 scope_fail
构造 scope_fail
也会导致意外行为,因为在不同线程中获得的未捕获异常计数可能在销毁期间进行比较。
[编辑] 示例
本节尚未完善 原因:没有示例 |
[编辑] 另请参阅
包装一个函数对象,并在退出范围时调用它 (类模板) | |
包装一个函数对象,并在正常退出范围时调用它 (类模板) | |
(C++11) |
用于 unique_ptr 的默认删除器 (类模板) |