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

StackOverflow https://stackoverflow.com/questions/104483

  •  01-07-2019
  •  | 
  •  

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

有帮助吗?

解决方案

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

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

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

其他提示

New会抛出异常。很简单。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top