Почему стандартные контейнеры требуют, чтобы allocator_type :: value_type был типом элемента? - PullRequest
0 голосов
/ 09 мая 2018

Похожие: Устаревание std :: allocator .

Следующее описание параметра шаблона Allocator найдено как для std::vector, так и для std::list (выделено мое):

Распределитель, который используется для получения / освобождения памяти и для создать / уничтожить элементы в этой памяти. Тип должен соответствовать Требования к Allocator. Поведение не определено, если Allocator::value_type не совпадает с T.

Последнее предложение не имеет смысла для меня. Если требуется конкретный value_type, не может ли он просто выполнить повторное связывание с распределителем?

1 Ответ

0 голосов
/ 10 мая 2018

Причина в основном историческая - связывание было более сложным, прежде чем C ++ 11 добавил allocator_traits. Networking TS определяет концепцию «прото-распределителя» ([async.reqmts.proto.allocator]), где перепривязка всегда применяется перед любым использованием, поэтому, вероятно, когда-нибудь требование будет ослаблено.

...