Думайте о распределителе как о типизированном интерфейсе, ссылающемся на некоторое базовое нетипизированное хранилище. Многие распределители могут ссылаться на одно и то же хранилище.
Распределители требуются для разрешения повторного связывания, чтобы распределитель для T
можно было превратить в распределитель для U
, ссылающегося на одно и то же хранилище. Распределители должны быть копируемыми, и копия распределителя должна ссылаться на то же хранилище. См. Cppreference.
Эта реализация распределителя также является хранилищем. Это происходит из пула памяти. Следовательно, для скопированного распределителя необходим способ выделения и освобождения из исходного хранилища, а не из его собственного. Это copyAllocator
. По непонятным причинам он делает это только на Windows.
Аналогично, распределителю отскока требуется доступ к тому же хранилищу. Этот распределитель, кажется, нарушает это и использует std::allocator
. Это означает, что он не подходит для многих случаев использования STL. std::map
и другие основанные на узлах контейнеры будут выделяться с помощью распределителя отскока, что означает, что они не будут использовать пул памяти.