1 | #pragma once |
---|---|
2 | #include <functional> |
3 | |
4 | namespace torch { |
5 | namespace jit { |
6 | |
7 | class 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 |