为什么容器的分配器作为模板参数传递?
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?
因为这只适用于一个分配器——标准分配器。但是如果你想以不同的方式分配内存怎么办?例如,您可能想使用共享内存、文件备份内存或其他任何东西。
这就是分配器的全部意义所在 - 允许用户自定义分配和释放内存的方式。
特别是,为什么我们有
template<typename T, typename A = allocator<T>>
class vector
{
A alloc;
//...
};
而不是
template<typename T>
class vector
{
allocator<T> alloc;
//...
};
我在 C++ 手册中看到了这个,这让我很困惑。还有哪些其他类型的分配器可能 want/need?
因为这只适用于一个分配器——标准分配器。但是如果你想以不同的方式分配内存怎么办?例如,您可能想使用共享内存、文件备份内存或其他任何东西。
这就是分配器的全部意义所在 - 允许用户自定义分配和释放内存的方式。