на самом деле кажется, что это то же самое: это невыполнимо из-за конструктора копирования, который должен был бы восстановить распределитель из стертого типа контекста.

ьшинстве мест, где стандартная библиотека C ++ выделяет память, пользователь может настроить ее, предоставив класс, который соответствуетAllocator требования, Например, почти все контейнеры принимают аргумент шаблона распределителя, иstd::allocate_shared возвращаетshared_ptr чей содержащийся элемент и блок управления распределяются через предоставленный распределитель.

Тем не менее, есть несколько мест, где стандартная библиотека может (потенциально) выделить память, но нетAllocator поддержка предоставляется. Те, о которых я могу думать, являются:

std::make_unique() (не соответствуетallocate_unique())std::anystd::function (поддержка распределителя будет удалена в C ++ 17)std::valarraystd::basic_filebuf (хотяstd::basic_stringbuf делает использовать Allocator)std::inplace_merge()

Вопросы:

Я уверен, что этот список неполон, но что еще я пропустил?Из классов и функций, не относящихся к Allocator, они определены для использования глобальных::operator newравнинаnewили источник памяти не указан?Если кто-нибудь знает, каковы причины не предоставления поддержки распределителя вanyи удалив его изfunction?

Ответы на вопрос(1)

Ваш ответ на вопрос