我previous question約boost.pool
導致我詳細調查boost.pool,現在我有一個補充問題,最後確定我的理解。
前奏
This reference狀態下面對對象池模式:
對象池模式是一種軟件造物設計模式 使用保持一組初始化的對象就可以使用,而不是按照需求分配和銷燬它們。
從我可以告訴,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()
?即如果升壓池無法確定內存是否仍在使用中,如何重新使用該內存?如果它不重用這個內存,這甚至被認爲是與維基引用所解釋的模式相同的模式嗎?
感謝兩種模式之間的比較,這完全回答了我的問題。 – jwalk 2013-04-06 15:38:24