🛰️航天仿真算法库 SpaceAST 0.3.1
载入中...
搜索中...
未找到
ast::ScopeExit< F > 模板类 参考

#include <ScopeExit.hpp>

Public 成员函数

 ScopeExit (const F &fn)
 
 ScopeExit (F &&fn)
 
 ScopeExit (ScopeExit &&other) noexcept(std::is_nothrow_move_constructible< F >::value)
 
 ~ScopeExit ()
 
 A_DISABLE_COPY (ScopeExit)
 
void invoke ()
 
void release () noexcept
 
bool isActive () const noexcept
 
 operator bool () const noexcept
 

Protected 属性

F fn_
 
bool active_ {true}
 

详细描述

template<typename F>
class ast::ScopeExit< F >

作用域退出守卫

持有一个无参可调用对象,在守卫析构时执行一次,从而保证提前返回、 跳出循环或抛出异常时清理动作都能完成——等价于其它语言的 defer 语句。 动作只执行一次:移动或 release() 之后原守卫不再执行。

模板参数
F无参可调用对象类型,如 lambda、函数对象、函数指针、std::function<void()> 等
注解
析构函数是隐式的 noexcept,清理动作一旦抛出异常将直接终止程序,因此动作本身不应抛出。
警告
守卫不可拷贝,但可以移动,以便从工厂函数 aScopeExit() 返回。
auto guard = aScopeExit([&]{ file.close(); }); // 离开作用域时自动 close
...
guard.release(); // 若不需要清理,则放弃动作
A_NODISCARD A_ALWAYS_INLINE ScopeExit< typename std::decay< F >::type > aScopeExit(F &&fn)
创建一个作用域退出守卫,在离开当前作用域时执行给定动作
定义 ScopeExit.hpp:117

成员函数说明

◆ invoke()

template<typename F >
void ast::ScopeExit< F >::invoke ( )
inline

立即执行清理动作并解除守卫

先解除再执行,因此即使动作抛出异常也不会被重复执行。


该类的文档由以下文件生成: