经典指数          
原因
1575
浏览数
0
收藏数
 

下列选项哪些是正确的
  • 对于unordered_map和map这两个容器,迭代器的有效性皆不受删除操作影响
  • 对于unordered_map和map这两个容器,迭代器的有效性皆不受插入操作影响
  • 为了保证代码的异常安全性,应该避免在构造函数中抛异常
  • 为了保证代码的异常安全性,应该避免在析构函数中抛异常

     举报   纠错  
 
切换
1 个答案
答案应该为D。 http://www.cplusplus.com/reference/map/map/erase/ 查看下边iterator validity这项。同理可以看到map的insert,unorder_map的insert和erase操作的这项属性。 A选项:当unorder_map和map某迭代器it指向的元素被删除时,只有该迭代器it失效,其他的迭代器不会失效。 B选项:map插入时不会引起迭代器失效;unorder_map插入时一般情况下不会引起迭代器失效,只有当容器增长到需要rehash时,原来的所有迭代器失效。 C选项:构造函数抛出异常后,已经构造的成员对象会被逆序析构,申请的内存资源会被系统释放,不会调用析构函数。而且构造函数抛出异常是唯一表明构造失败的方法。 D选项:effective C++“条款08:别让异常逃离析构函数”指出来如果析构函数抛出异常,对于vector这样的一个对象数组,如果第一个Widget析构有异常抛出,这时候还要销毁数组中剩下的Widget否则会造成内存泄漏,但是如果剩下的Widget析构时也抛出异常,就会两个异常同时存在,程序如果不是结束执行就会产生不明确行为。即使不是使用容器或数组,在析构函数中抛出异常也可能导致程序过早结束或不明确行为。
 
切换
撰写答案
扫描后移动端查看本题