アプリケーションの特定の要件を満たすものが見つからなかったため、カスタム オブジェクト プールを作成しています。オブジェクトプール自体は、「存在する場合は事前に割り当てられたオブジェクトをリストから取得し、そうでない場合は新しいオブジェクトを作成して事前に割り当てられたオブジェクトのリストに追加する」という単純なモデルに従います。これまでのところ、マルチスレッドの場合のロック、返されたオブジェクトの構築/破棄の 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
オブジェクトの構築よりも低レベルのメモリ関連のパフォーマンスに適しているようです。また、私が解決しようとしている問題により本質的に適しているように思われるorも考慮boost::bind
しました。boost::function
functor
私はこれが以前に行われたと確信しています - それで、典型的なアプローチは何ですか?