2016-03-04 37 views

回答

1

這個文件很清楚。實際上,我從文檔中扣除的所有內容,我從來沒有使用過Poco,但是在這裏。


讓我們假設你有一個class Foo。出於某種原因,您不想在每次需要時創建一個新的。創建可能很昂貴。也許它組織了一些重要的資源。你想它,從池中取一個對象,當你完成它時,把它放回池中。

您爲Foo對象創建一個Poco::ObjectPool,給出其起始容量(最初創建的對象數)和峯容量。

Poco::ObjectPool<Foo> pool(10, 20); 

您現在可以從池中「借用」對象。請注意,如果達到峯值容量,該功能可以返回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;