на самом деле кажется, что это то же самое: это невыполнимо из-за конструктора копирования, который должен был бы восстановить распределитель из стертого типа контекста.
ьшинстве мест, где стандартная библиотека C ++ выделяет память, пользователь может настроить ее, предоставив класс, который соответствуетAllocator
требования, Например, почти все контейнеры принимают аргумент шаблона распределителя, иstd::allocate_shared
возвращаетshared_ptr
чей содержащийся элемент и блок управления распределяются через предоставленный распределитель.
Тем не менее, есть несколько мест, где стандартная библиотека может (потенциально) выделить память, но нетAllocator
поддержка предоставляется. Те, о которых я могу думать, являются:
std::make_unique()
(не соответствуетallocate_unique()
)std::any
std::function
(поддержка распределителя будет удалена в C ++ 17)std::valarray
std::basic_filebuf
(хотяstd::basic_stringbuf
делает использовать Allocator)std::inplace_merge()
Вопросы:
Я уверен, что этот список неполон, но что еще я пропустил?Из классов и функций, не относящихся к Allocator, они определены для использования глобальных::operator new
равнинаnew
или источник памяти не указан?Если кто-нибудь знает, каковы причины не предоставления поддержки распределителя вany
и удалив его изfunction
?