为什么将分配器作为模板参数传递给容器?
特别是,为什么我们的为什么将分配器作为模板参数传递给容器?
template<typename T, typename A = allocator<T>>
class vector
{
A alloc;
//...
};
,而不是
template<typename T>
class vector
{
allocator<T> alloc;
//...
};
我在C++手动看到这一点,它混淆了我不少。还有什么其他类型的分配器可能需要/需要?
因为这只适用于一个分配器 - 标准分配器。但是如果你想分配不同的内存呢?例如,您可能想要使用共享内存或文件备份内存或其他任何内容。
这是有分配器 - 允许用户定制内存将被分配和释放的方式。
这是有道理的我从来没有考虑过任何其他方式来分配内存,而不是抓住一个当你需要的时候,你可以从免费商店中获得大量的信息,谢谢! –
@AldenBernitt,共享内存是首先想到的东西。 ocators(它并不真正从动态内存中分配),或者,例如,线程优化的分配器。 – SergeyA
另一个有用的分配器是一个调试/仪表分配器。 –
以及你将如何指定分配器? –
人们可能想要一个使用静态内存块而不是堆的分配器。矢量消失后,可以立即释放整个块而不是单个块,从而减少了簿记量并提高了效率。第一个版本允许编写这样的自定义分配器,而第二个版本不允许。 – nwp
如果只有一个分配器(免费商店),那么完全不需要“分配器”。该系统将直接进入免费商店。所以你的问题应该是“为什么我们有分配器?为什么不用硬编码'new'和'delete'? –