对于std :: map,如果必须调整容器大小并且内存不可用,插入的行为如何?
答案 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这样的连续分配的容器不同。