为什么容器的分配器作为模板参数传递?

Why are allocators to containers passed as template parameters?

特别是,为什么我们有

template<typename T, typename A = allocator<T>>
class vector
{
    A alloc;
    //...
};

而不是

template<typename T>
class vector
{
    allocator<T> alloc;
    //...
};  

我在 C++ 手册中看到了这个,这让我很困惑。还有哪些其他类型的分配器可能 want/need?

因为这只适用于一个分配器——标准分配器。但是如果你想以不同的方式分配内存怎么办?例如,您可能想使用共享内存、文件备份内存或其他任何东西。

这就是分配器的全部意义所在 - 允许用户自定义分配和释放内存的方式。