17 explicit Pool(uint32_t limit_bytes) : limit_bytes_(limit_bytes) {}
19 std::shared_ptr<T>
Grab() {
20 std::scoped_lock lock(mutex_);
24 std::shared_ptr<T> result = std::move(pool_.back());
26 size_ -= result->GetSize();
31 std::scoped_lock lock(mutex_);
32 size_t object_size =
object->GetSize();
33 if (size_ + object_size <= limit_bytes_ &&
34 object_size < (limit_bytes_ / 2)) {
37 pool_.emplace_back(std::move(
object));
42 std::scoped_lock lock(mutex_);
47 std::vector<std::shared_ptr<T>> pool_;
48 const uint32_t limit_bytes_;
51 mutable std::mutex mutex_;