В C++11 появилась новая система распределения. Он обратно совместим из-за слабых требований к распределителям в старом стандарте, но может потребоваться некоторые изменения для распределителей, которые работали со старыми версиями неупорядоченных контейнеров. Использует класс признаковallocator_traitsдля обработки распределителя, добавляющего дополнительную функциональность и делающего некоторые методы и типы необязательными. При разработке стабильного выпускаallocator_traitsне было доступно, поэтому в этой версии всегда используется внутренняя частичная реализация. Будем надеяться, что будущая версия будет использовать стандартную реализацию.
Функции-членыконструируют,разрушаютиmax_sizeтеперь являются необязательными, если они недоступны, используется запасной вариант. Полная реализациячерт распределителятребует сложного обнаружения функции члена, так что запасной вариант используется всякий раз, когда вызов функции члена плохо сформирован. Для этого требуется поддержка выражений SFINAE, которые доступны на GCC из версий 4.4 и Clang.
На других компиляторах есть только тест, чтобы увидеть, есть ли у распределителя член, но нет проверки, что его можно назвать. Поэтому вместо использования резервного копирования будет просто ошибка компиляции.
propagate_on_container_copy_assignment,propagate_on_container_move_assignment,propagate_on_container_swapиselect_on_container_copy_constructionтакже поддерживаются. Из-за несовершенной эмуляции движения некоторые назначения могут проверятьраспространение_on_container_copy_assignmentна некоторых компиляторах ираспространение_on_container_move_assignmentна других.
Использование методов построения и разрушения распределителя может быть немного удивительным. Узлы строятся и разрушаются с помощью распределителя, но элементы хранятся в выровненном пространстве внутри узла и строятся и разрушаются путем вызова конструктора и деструктора напрямую.
В C++11 функция построения распределителя имеет подпись:
template <class U, class... Args>
void construct(U* p, Args&&... args);
(52)для содержащегося объекта, но большинство существующих распределителей не поддерживают это. Если обнаружение функции члена было достаточно хорошим, то со старыми распределителями оно возвращалось бы к вызову конструктора элемента напрямую, но в целом обнаружение недостаточно хорошо для этого. Неупорядоченный просто звонит конструктору каждый раз. В большинстве случаев это будет работать нормально.
указательные чертыне используются. Вместо этого, типы указателей получают из распределителей отскока, это может вызвать проблемы, если распределитель не может быть использован с неполными типами. Еслиconst_pointerне определен в распределителе,boost::pointer_to_other<pointer,constvalue_type>::typeиспользуется для получения const pointer.
 
Поскольку контейнеры используютstd::пара, они ограничены версией из текущей стандартной библиотеки. Но поскольку C++11std::pairpiecewise_constructBased constructor очень полезен,Emplaceэмулирует егоpiecewise_constructвboost:неупорядоченноепространство имен. Так, например, будет работать следующее:
boost::unordered_multimap<std::string, std::complex> x;
x.emplace(
    boost::unordered::piecewise_construct,
    boost::make_tuple("key"), boost::make_tuple(1, 2));
Старые проекты стандарта также поддерживали вариадные конструкторы дляstd::пары, где первый аргумент будет использоваться для первой части пары, а оставшийся для второй части.
 
При заменеPredиHashв настоящее время не заменяются вызовомswap, используются их конструкторы копий. Как следствие, при замене исключения могут быть выброшены из их конструктора копий.
Аргументы вариадного конструктора дляместаиспользуются только тогда, когда доступны как ссылки на значение r, так и параметры вариадных шаблонов. В противном случаеместоможет принимать только до 10 аргументов конструкторов.