Когда вы вызываете deallocate
, вы должны дать ему указатель, который вы ранее получили при вызове allocate
, и размер, который вы передали allocate
, когда вы изначально выделяли память.
Например,
#include <memory>
std::allocator<int> a;
int* p = a.allocate(42);
a.deallocate(p, 42); // the size must match the size passed to allocate
Это полезно для многих различных типов распределителей. Например, у вас может быть распределитель, который использует разные пулы для блоков разных размеров; такой распределитель должен был бы знать, каков размер освобождаемого блока, чтобы он знал, в какой пул он должен вернуть память.