我正在编写一个自定义对象池,因为我找不到任何符合我的应用程序特定要求的对象池。对象池本身遵循“如果存在则从列表中获取预分配对象,否则创建一个新对象并添加到预分配对象列表”的简单模型。到目前为止一切顺利:在多线程的情况下锁定,返回对象构造/销毁时的 RAII,并且它已被模板化,以便我可以将任何对象类型指定为“池”。
现在我正在完成我的最后一项任务。我希望能够允许客户端指定一个自定义函数来使用它构造一个在请求时返回的新对象,而不是默认的构造函数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
or functor
,这似乎更适合我试图解决的问题。
我敢肯定这已经完成了 - 那么,典型的方法是什么?