如何在我的c ++程序中使用Poco::ObjectPool
类?任何人都可以用一个例子来描述这个,因为我第一次使用Poco库。
感谢期待。
答案 0 :(得分:2)
文档非常明确。实际上,我在下面写的所有内容都是从文档中扣除的,我自己从未使用过Poco ......但是这里有。
我们假设你有class Foo
。出于某种原因,您不希望每次需要时都创建一个新的。也许创建成本很高。也许它会整理一些重要的资源。您希望 pool 它,从池中取出一个对象,并在完成后将其放回池中。
为Poco::ObjectPool
个对象创建Foo
,给出其初始容量(最初创建的对象数)和峰值容量。
Poco::ObjectPool< Foo > pool( 10, 20 );
你现在可以借#34;池中的对象。请注意,如果达到峰值容量,该函数可以返回nullptr
。
Foo * f = pool.borrowObject();
...完成后将其返回池中。
pool.returnObject( f );
您可以为ObjectPool
提供一个策略类来自定义其行为,该接口由PoolableObjectFactory
定义。此类处理如何创建,激活,验证对象(检查它们是否可以重用或需要销毁),停用和销毁(如果它们无法重用,或者池被破坏)。
struct FooFactory
{
Foo * createObject() { return new Foo( 42 ); }
void activateObject( Foo * p ) { p.init(); }
bool validateObject( Foo * p ) { return true; }
void deactivateObject( Foo * p ) { p.deinit(); }
void destroyObject( Foo * p ) { delete p; }
};
Poco::ObjectPool< Foo, Foo *, FooFactory > pool;