Два не противоречат друг другу. Распределители - это PolicyPattern или StrategyPattern, используемые адаптерами контейнеров библиотек STL для выделения кусков памяти для использования с объектами.
Эти распределители часто оптимизируют распределение памяти, позволяя
* диапазоны элементов, которые должны быть выделены сразу, а затем инициализированы с использованием нового размещения
* элементы, которые будут выбраны из вторичных, специализированных куч в зависимости от размера блока
Так или иначе, конечный результат (почти всегда) будет заключаться в том, что объектам назначается новое (размещение или по умолчанию)
Другим ярким примером будет, например, как библиотека Boost реализует интеллектуальные указатели. Поскольку smartpointers очень малы (с небольшими издержками), накладные расходы могут стать бременем. Для реализации имеет смысл определить специализированный распределитель для выполнения распределений, поэтому можно иметь эффективные std :: set <> smartpointers, std :: map <..., smartpointer> и т. Д.
(Теперь я почти уверен, что boost фактически оптимизирует хранилище для большинства интеллектуальных указателей, избегая любых виртуальных сред, поэтому vft, делая класс структурой POD, с только необработанным указателем в качестве хранилища; некоторые из примеров не будут применяться. Но опять же, экстраполируйте на другие виды интеллектуальных указателей (пересчет интеллектуальных указателей, указатели на функции-члены, указатели на функции-члены со ссылкой на экземпляр и т. Д. И т. Д.))