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