命名空间
变体
操作

std::experimental::scope_fail

来自 cppreference.com
定义在头文件 <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 也会导致意外行为,因为在不同线程中获得的未捕获异常计数可能在销毁期间进行比较。

[编辑] 示例

[编辑] 另请参阅

包装一个函数对象,并在退出范围时调用它
(类模板) [编辑]
包装一个函数对象,并在正常退出范围时调用它
(类模板) [编辑]
用于 unique_ptr 的默认删除器
(类模板) [编辑]