我有一个关于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
之后的部分。
答案 0 :(得分:1)
默认分配器D
用于push_back
来电。
实际上,默认分配器也用于map
,因为容器的类型指定使用默认分配器。假设您的A
继承自std::allocator
,所发生的一切就是您的分配器被切成默认值,容器的行为就像您根本没有传递分配器实例一样。