使用 ScopeGuard 让代码更加安全可靠

2020-03-10  本文已影响0人  cptn3m0

ScopeGuard用于实现Go语言中defer的功能。其主要思想和ScopeLock类似,即利用C++栈展开机制——C++ runtime会对scope抛出异常之前定义的栈上对象进行逐个析构——达到出现异常时能够正常回滚的功能.

ScopeGuard 哪里找

  1. Boost
  2. 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 的用法, 会

上一篇下一篇

猜你喜欢

热点阅读