我正在编写自定义对象池,因为我无法找到满足应用程序特定要求的对象。对象池本身遵循一个简单的"从列表中获取预先分配的对象(如果存在),否则创建一个新对象并添加到预先分配的对象列表中#34; 。到目前为止一直这么好:在多线程的情况下锁定,在返回的对象构造/销毁时使用RAII,并且它已被模板化以便我可以指定任何对象类型为" pool"。
现在我完成了最后的任务。我希望能够允许客户端指定一个自定义函数来构造在请求时返回的新对象,而不是默认构造函数new _obj()
。推理使得可以使用非默认构造函数,这可能有人可能想要预先绑定一些参数并使用该有界构造函数作为分配方法。一个简化的用法示例:
class obj {
obj(int x) { ... }
};
void foo() {
object_pool<obj> pool(bind(&obj::obj, 1))
obj *o = pool.acquire() // obj pool will construct as "new obj(1)"
}
我一直在研究allocator
,这似乎更适合与对象构建相关的低级内存相关性能。我还考虑boost::bind
boost::function
或functor
来{{1}},这似乎更适合我试图解决的问题。
我确信之前已经完成了 - 那么,典型的做法是什么?