std::allocator
представляет собой абстракцию над базовой моделью памяти, которая обертывает функциональные возможности вызова new
и delete
. delete
не нужен размер, но deallocate() требует его.
void deallocate (T * p, std:: size_t n);
"Аргумент n должен быть равен первому аргументу вызова allocate(), изначально созданный p; в противном случае поведение undefined."
Почему?
Теперь мне нужно либо выполнить дополнительные вычисления перед освобождением, либо начать хранить размеры, которые я передал для выделения. Если бы я не использовал распределитель, мне бы не пришлось это делать.