A there are many instances of a template class each of which has its own free list. They make it much more difficult to construct thread-safe containers. A class that maintains its own free list must ensure that allocations from different threads on behalf of different containers cannot interfere with each other. This typically means that every class must be aware of the underlying synchronization primitives. If allocators allocate individual objects, then only allocators themselves need to address this issue, and most container implementations can be independent of the threading mechanism.
Garbage collecting allocators are difficult to accommodate.
The garbage collector will see per-class free lists as accessible memory. If pointers in these free objects are not explicitly cleared, anything they reference will also be retained by the collector, reducing the effectiveness of the collector, sometimes seriously so. Deallocate requires size argument We chose to require an explicit size argument, both for deallocate , and to describe the original size of the object in the reallocate call. Thus, even in the absence of fragmentation, space usage is the same as for per-class allocators. This choice also removes some time overhead in the important special case of fixed-size allocation.