std :: alocador constrói / destrói vs. posicionamento new / p-> ~ T ()

Para um projeto meu, estou escrevendo alguns contêineres STL do zero (tenho minhas razões). Como imitamos a funcionalidade e as interfaces da STL tão de perto, estou fazendo o possível para manter a política "se ela tiver o mesmo nome de uma construção padrão, ela estará em conformidade com a norma o máximo possível"

Portanto, é claro que meus contêineres usam alocadores como um parâmetro de modelo, o que é muito bom, pois permite alguns esquemas de alocação personalizados. Para a minha pergunta.

Ostd::allocator interface @ separa a alocação de memória da construção do objeto. Da mesma forma, separa desalocação da destruição. Isso faz sentido, pois de onde você obtém memória é mais ou menos irrelevante para a construção correta de um objeto em c +

ortanto, existem duas funções de construção / desalocação que se parecem com isso para a implementação padrão (extraída diretamente de um livro

void construct(pointer p, const T& val)    { new(p) T(val); }
void destroy(pointer p)                    { p->~T(); }

Como você pode ver, o construtor simplesmente chama de colocação nova e o destrói simplesmente chama o destruido

Existe algum motivo para usá-los usando apenas a sintaxe de posicionamento novo e destruidor? um alocador "correto" pode implementá-los de outra maneira? Ou estou garantido que todas as implementações de alocadores que estejam em conformidade com o padrão terão lá métodos de construção / destruição implementados dessa maneira?

Mais ao ponto, é seguro dizer que sempre posso usar ostd::uninitialized_copy estd::uninitialized_fill para construir os elementos dos meus contêineres?

Obrigado

questionAnswers(2)

yourAnswerToTheQuestion