Common: add on_scope_exit utility for scope-based resource management

This commit is contained in:
李通洲
2026-01-13 18:33:02 +08:00
parent 49fc95689d
commit e6bd1c340f
5 changed files with 23 additions and 37 deletions
+19
View File
@@ -0,0 +1,19 @@
#pragma once
#include <utility>
#include <type_traits>
template <typename Fn>
struct on_scope_exit {
static_assert(std::is_nothrow_move_constructible<Fn>::value,
"Fn must be nothrow move constructible");
explicit on_scope_exit(Fn &&fn) noexcept
: _fn(std::move(fn)) {};
on_scope_exit(const on_scope_exit&) = delete;
on_scope_exit& operator=(const on_scope_exit&) = delete;
~on_scope_exit() noexcept { this->_fn(); }
private:
Fn _fn;
};