63 std::deque<T> _pool {};
64 std::mutex _poolLock {};
67 resource_pool() =
default;
68 resource_pool(resource_pool&) =
delete;
69 resource_pool(resource_pool&& src) =
default;
70 resource_pool& operator=(resource_pool&) =
delete;
71 resource_pool& operator=(resource_pool&& src) =
default;
82 std::scoped_lock<std::mutex> l(_poolLock);
91 std::scoped_lock<std::mutex> l(_poolLock);
95 [[nodiscard]] T checkout()
97 std::scoped_lock<std::mutex> l(_poolLock);
99 RunOnEnd roe([&]() { _pool.pop_front(); });
100 return std::move(_pool.front());
103 throw std::runtime_error(
"Empty pool; add something first!");
113 std::scoped_lock<std::mutex> l(_poolLock);
114 _pool.push_back(std::move(rsrc));