std::experimental::scope_exit
来自cppreference.com
< cpp | experimental
定义于头文件 <experimental/scope>
|
||
template<class EF> class scope_exit; |
(库基础 TS v3) | |
类模板 scope_exit
是通用的作用域防护,有意使它在退出作用域时调用其退出函数。
scope_exit
非可复制构造 (CopyConstructible) 、可复制赋值 (CopyAssignable) 或可移动赋值 (MoveAssignable) ,然而若 EF
满足某些要求则它可能为可移动构造 (MoveConstructible) ,这允许包装 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 的默认删除器 (类模板) |