对于std::map,如果insert必须调整容器大小且内存不可用,它将如何工作?

对于std::map,如果insert必须调整容器大小且内存不可用,它将如何工作?,insert,stdmap,Insert,Stdmap,对于std::map,如果insert必须调整容器大小且内存不可用,它将如何运行?New将引发异常。就这么简单 插入不会发生,字典的内容也不会被修改或损坏。STL映射不必“调整”容器大小。map(就像list)是一个基于节点的容器;每次插入都分配内存 这就是说,内存不足情况的处理方式与C++中的任何其他内存不足情况一样:它抛出一个std::bad_alloc。带有默认分配器的STL容器不会做任何花哨的事情,它们最终都会通过标准的new/delete操作符进行分配 在STL映射的情况下,它将抛出异

对于std::map,如果insert必须调整容器大小且内存不可用,它将如何运行?

New将引发异常。就这么简单

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

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

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

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

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

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