1#pragma once
2#include <functional>
3
4namespace torch {
5namespace jit {
6
7class ResourceGuard {
8 std::function<void()> _destructor;
9 bool _released;
10
11 public:
12 ResourceGuard(std::function<void()> destructor)
13 : _destructor(std::move(destructor)), _released(false) {}
14
15 // NOLINTNEXTLINE(bugprone-exception-escape)
16 ~ResourceGuard() {
17 if (!_released)
18 _destructor();
19 }
20
21 void release() {
22 _released = true;
23 }
24};
25
26} // namespace jit
27} // namespace torch
28