Recursos de biblioteca padrão que alocam, mas não usam um Alocador
Na maioria dos lugares em que a biblioteca padrão C ++ aloca memória, o usuário pode personalizá-lo, fornecendo uma classe que atenda àsAllocator
requisitos. Por exemplo, quase todos os contêineres usam um argumento de modelo de alocador estd::allocate_shared
retorna umshared_ptr
cujo elemento contido e bloco de controle são alocados por meio de um alocador fornecido.
No entanto, existem alguns lugares em que a biblioteca padrão pode (potencialmente) alocar memória, mas não háAllocator
suporte é fornecido. Os que eu consigo pensar são:
std::make_unique()
(sem correspondênciaallocate_unique()
)std::any
std::function
(o suporte do alocador será removido no C ++ 17)std::valarray
std::basic_filebuf
(Apesarstd::basic_stringbuf
faz use um alocador)std::inplace_merge()
Questões:
Tenho certeza de que esta lista está incompleta, mas o que mais eu perdi?Das classes e funções não-Alocadoras, elas são especificadas para usar global::operator new
, aviãonew
, ou a fonte de memória não é especificada?Se alguém souber, quais são as razões para não fornecer suporte ao alocador emany
e removê-lo defunction
?