分配嵌套的STL容器时使用哪个分配器?

时间:2012-10-03 02:41:58

标签: c++ stl map vector allocator

我有一个关于STL类和分配器的问题,这些问题似乎不容易在网上找到。有谁知道在嵌套的STL类中使用了哪个分配器?例如:

typedef std::vector<int> myvect;

//按照后续回复/评论

的指示编辑了下面这一行
typedef std::map<int, myvect, std::less<int>, A> mymap; //uses my custom allocator for map creation

让我们调用默认的分配器D,并假设我有一个自定义分配器A

如果我执行以下操作会发生什么:

  • 创建地图:

    mymap mapInstance;
    
  • 现在,假设mapInstance[0]存在一个条目,假设我将一个值推入向量:

    mapInstance[0].push_back(999);
    

什么分配器用于向量mapInstance[0]的动态内存?

到目前为止,我的理解是使用了默认分配器D,但我想确认不会使用传递给映射的自定义分配器A。 (据我所知,只有在我使用某种嵌套分配选项时才会发生这种情况。)

当然,我理解mapInstance[0]的元数据/标头信息是使用自定义分配器A分配的。我关心的是动态内存部分,即d_dataBegin之后的部分。

1 个答案:

答案 0 :(得分:1)

默认分配器D用于push_back来电。

实际上,默认分配器也用于map,因为容器的类型指定使用默认分配器。假设您的A继承自std::allocator,所发生的一切就是您的分配器被切成默认值,容器的行为就像您根本没有传递分配器实例一样。