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

问题描述:

特别是,为什么我们的为什么将分配器作为模板参数传递给容器?

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

,而不是

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

我在C++手动看到这一点,它混淆了我不少。还有什么其他类型的分配器可能需要/需要?

+4

以及你将如何指定分配器? –

+3

人们可能想要一个使用静态内存块而不是堆的分配器。矢量消失后,可以立即释放整个块而不是单个块,从而减少了簿记量并提高了效率。第一个版本允许编写这样的自定义分配器,而第二个版本不允许。 – nwp

+0

如果只有一个分配器(免费商店),那么完全不需要“分配器”。该系统将直接进入免费商店。所以你的问题应该是“为什么我们有分配器?为什么不用硬编码'new'和'delete'? –

因为这只适用于一个分配器 - 标准分配器。但是如果你想分配不同的内存呢?例如,您可能想要使用共享内存或文件备份内存或其他任何内容。

这是有分配器 - 允许用户定制内存将被分配和释放的方式。

+0

这是有道理的我从来没有考虑过任何其他方式来分配内存,而不是抓住一个当你需要的时候,你可以从免费商店中获得大量的信息,谢谢! –

+0

@AldenBernitt,共享内存是首先想到的东西。 ocators(它并不真正从动态内存中分配),或者,例如,线程优化的分配器。 – SergeyA

+1

另一个有用的分配器是一个调试/仪表分配器。 –