バックグラウンド
以前の質問により、 boost.poolboost.pool
を詳細に調査することになりましたが、理解を深めるための補足的な質問があります。
前奏曲
このリファレンスでは、オブジェクト プール パターンについて次のように述べています。
オブジェクト プール パターンは、必要に応じてオブジェクトを割り当てて破棄するのではなく、すぐに使用できるように保持された初期化済みオブジェクトのセットを使用するソフトウェア作成設計パターンです。
私が知る限り、boost.pool
(単純化された) は、主に のサイズに基づくメモリの割り当てと管理によってオブジェクト プール パターンを実装element_type
し、割り当てられたオブジェクトへの単純なポインターを返します。
element_type * malloc();
void free(element_type * p);
free
簡単なブーストの例は、取得した要素を明示的に指定する必要がないことも示しています。
X * const t = p.malloc();
... // Do something with t; don't take the time to free() it.
質問
割り当てられたメモリがプール オブジェクトの破棄時に安全に解放されることは理解していますが、クライアントによって取得されたメモリのブロックが解放されてプールに戻され、インターフェイスが直接ポインタを返す場合に再利用可能であることをプールはどのように認識しますか?へelement_type
の呼び出しfree()
はまだ必要ありませんか? つまり、メモリがまだ使用されていないことが確実でない場合、ブースト プールはどのようにしてこのメモリを再利用できますか? そして、このメモリを再利用しない場合、これは wiki リファレンスで説明されているものと同じパターンと見なされますか?