带有c ++示例的Poco :: ObjectPool

时间:2016-03-04 12:20:26

标签: c++ poco

如何在我的c ++程序中使用Poco::ObjectPool类?任何人都可以用一个例子来描述这个,因为我第一次使用Poco库。 感谢期待。

1 个答案:

答案 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;