4

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

4

3 回答 3

6

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

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

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

于 2008-09-19T18:56:11.957 回答
0

New 会抛出异常。就这么简单。

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

于 2008-09-19T18:53:00.420 回答
0

为了扩展 Nils 的答案(是的,它会抛出),但是当它抛出时会发生什么有时会在规范中令人困惑。

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

于 2008-09-19T19:00:24.223 回答