对于std :: map,如果必须调整容器大小并且内存不可用,插入的行为方式如何?

时间:2008-09-19 18:50:32

标签: insert stdmap

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

3 个答案:

答案 0 :(得分:6)

STL地图不必“调整大小”容器。 map(就像list一样)是一个基于节点的容器;每个插入分配内存。

也就是说,内存不足的情况就像处理C ++中的任何其他内存不足一样:它会抛出一个std :: bad_alloc。具有默认分配器的STL容器不会做任何花哨的事情,它们最终都会通过标准的新/删除操作符以某种方式分配

在STL map的情况下,它会抛出异常,否则就会表现得好像没有被调用一样。也就是说,容器将保持不变。

答案 1 :(得分:0)

New会抛出异常。很简单。

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

答案 2 :(得分:0)

要扩展Nils答案(是的,它会抛出),但是当它抛出时会发生什么有时会让规格混乱。

在规范的17.2.2中(关于map / exceptions),如果insert()抛出,则该函数无效。这是地图的有力保证。这与使用像vector或deque这样的连续分配的容器不同。