使用 ScopeGuard 让代码更加安全可靠
2020-03-10 本文已影响0人
cptn3m0
ScopeGuard用于实现Go语言中defer的功能。其主要思想和ScopeLock类似,即利用C++栈展开机制——C++ runtime会对scope抛出异常之前定义的栈上对象进行逐个析构——达到出现异常时能够正常回滚的功能.
ScopeGuard 哪里找
- Boost
- Folly
Boost
#include <folly/ScopeGuard.hpp>
// my code:
auto resource = acquireResource(...);
SCOPE_EXIT{releaseResource(resource);}
folly
#include <boost/scope_exit.hpp>
// my code
auto resource = acquireResource(...);
BOOST_SCOPE_EXIT(&resource) { // capture resource by reference
releaseResource(resource);
} BOOST_SCOPE_EXIT_END
简评
采用类似 defer 的用法, 会
- Boost 中的捕捉环境变量的用法类似 lambda 中的捕获列表
- folly的用法简单一些.