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