Como o boost.pool consegue reutilizar a memória alocada?

fundo

Minhaspergunta anterior sobreboost.pool me levou a investigar boost.pool em detalhes, e agora eu tenho uma pergunta complementar para finalizar meu entendimento.

Prelúdio

Esta referência indica o seguinte sobre o padrão do conjunto de objetos:

O padrão de conjunto de objetos é um padrão de design criacional de software que usa um conjunto de objetos inicializados mantidos prontos para uso, em vez de alocá-los e destruí-los sob demanda.

Pelo que posso dizer,boost.pool (simplificado) implementa o padrão de pool de objetos por meio de alocação de memória e gerenciamento baseado principalmente no tamanho de umelement_typee retorna um ponteiro simples para um objeto alocado:

element_type * malloc();
void free(element_type * p);

Um simples exemplo de aumento também mostra que não é necessário explicitamentefree o elemento adquirido:

X * const t = p.malloc();
... // Do something with t; don't take the time to free() it.

Questão

Eu entendo que a memória alocada será liberada com segurança na destruição do objeto pool, mas como o pool sabe quando um bloco de memória adquirido por um cliente foi liberado de volta ao pool e é reutilizável se sua interface retornar um ponteiro direto paraelement_type, ainda uma chamada parafree() ainda não é necessário? Ou seja, como o pool de reforço pode reutilizar essa memória se não puder ter certeza de que a memória ainda não está em uso? E se ele não reutilizar essa memória, isso é considerado o mesmo padrão que o explicado pela referência do wiki?

questionAnswers(2)

yourAnswerToTheQuestion