瀏覽代碼

release() implemented for scope_guard (fixes #4).

main
offa 7 年之前
父節點
當前提交
494a662243
共有 2 個文件被更改,包括 25 次插入2 次删除
  1. +13
    -2
      include/scope_guard.h
  2. +12
    -0
      test/ScopeGuardTest.cpp

+ 13
- 2
include/scope_guard.h 查看文件

{ {
public: public:


explicit scope_guard_t(Deleter&& deleter) noexcept : m_deleter(std::move(deleter))
explicit scope_guard_t(Deleter&& deleter) noexcept : m_deleter(std::move(deleter)),
m_execute_on_destruction(true)
{ {
} }




~scope_guard_t() ~scope_guard_t()
{ {
m_deleter();
if( m_execute_on_destruction == true )
{
m_deleter();
}
}


void release()
{
m_execute_on_destruction = false;
} }




private: private:


Deleter m_deleter; Deleter m_deleter;
bool m_execute_on_destruction;
}; };





+ 12
- 0
test/ScopeGuardTest.cpp 查看文件

REQUIRE(executed == true); REQUIRE(executed == true);
} }


TEST_CASE("deleter is not called if released", "[ScopeGuard]")
{
bool executed = false;

{
auto guard = sg::scope_guard([&executed] { executed = true; });
guard.release();
}

REQUIRE(executed == false);
}


Loading…
取消
儲存