Как boost.pool обеспечивает повторное использование выделенной памяти?

Фон

мойпредыдущий вопрос околоboost.pool побудил меня детально изучить boost.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() все еще не требуется? как пул буста может повторно использовать эту память, если нет уверенности, что она еще не используется? И если он не использует эту память повторно, считается ли это тем же шаблоном, который описан в вики-справке?