【发布时间】:2021-09-03 07:25:27
【问题描述】:
我想实现一个object pool,所以需要自己管理对象的内存。于是想到自定义shared_ptr的deleter实现对象回收。以下是link的示例参考
template <typename T>
class object_pool
{
std::shared_ptr<tbb::concurrent_bounded_queue<std::shared_ptr<T>>> pool_;
public:
object_pool()
: pool_(new tbb::concurrent_bounded_queue<std::shared_ptr<T>>()){}
// Create overloads with different amount of templated parameters.
std::shared_ptr<T> create()
{
std::shared_ptr<T> obj;
if(!pool_->try_pop(obj))
obj = std::make_shared<T>();
// Automatically collects obj.
return std::shared_ptr<T>(obj.get(), [=](T*){pool_->push(obj);});
}
};
问题
由于std::shared_ptr的deleter并没有释放内存,那么如何在“~object_pool”函数中释放内存呢?
【问题讨论】:
-
池中的共享指针可能只是想成为标准删除器的普通共享指针。然后,您可以使用
create中的自定义删除器将这些对象转移到新的共享指针
标签: c++ shared-ptr