对于std :: map,如果必须调整容器大小并且内存不可用,插入将如何表现?

时间:2020-03-06 14:27:19  来源:igfitidea点击:

对于std :: map,如果必须调整容器大小并且内存不可用,插入将如何表现?

解决方案

新将引发异常。那样简单。

插入不会发生,字典的内容也不会被修改或者破坏。

STL映射不必"调整"容器大小。 map(就像列表一样)是一个基于节点的容器;每个插入分配内存。

也就是说,内存不足情况的处理与C ++中的其他任何内存不足情况一样:它抛出std :: bad_alloc。具有默认分配器的STL容器没有任何花哨的地方,它们最终都以某种方式通过标准的new / delete运算符进行分配。

在STL映射的情况下,它将引发异常,否则将表现为未调用。也就是说,容器将保持不变。

为了扩大对Nils的回答(是的,它将抛出),但是在抛出时发生的情况有时会使规范混乱。

在规范的17.2.2(关于映射/异常)中,如果insert()抛出,则该函数无效。这是地图的有力保证。这与使用连续分配(例如向量或者双端队列)的容器不同。