大多数人都说永远不会从析构函数中抛出异常 - 这样做会导致未定义的行为.Stroustrup指出"向量析构函数显式地为每个元素调用析构函数.这意味着如果元素析构函数抛出,向量破坏失败......实际上没有好的方法来防止从析构函数抛出的异常,所以库如果元素析构函数抛出",则不保证"(来自附录E3.2).
这篇文章似乎另有说法 - 抛出析构函数或多或少都没问题.
所以我的问题是 - 如果从析构函数抛出会导致未定义的行为,那么如何处理析构函数期间发生的错误?
如果在清理操作期间发生错误,您是否只是忽略它?如果它是一个可能在堆栈中处理但在析构函数中不正确的错误,那么从析构函数中抛出异常是否有意义?
显然,这类错误很少见,但可能.
我最近发布了一个关于QObject在典型使用场景中的开销的问题,但遗憾的是,这个问题已被关闭,因为它是另一个在技术上没有回答问题的问题的副本.
更糟的是,仓促"撒玛利亚人"谁礼貌地赶到关闭我的问题打断了答案,我跑了几个测试之后刚刚完成打字.由于我不能在原始问题中发布我的发现,我将在此处发布,以便其他可能需要该信息的人可以使用.
如果我想用vector中的值删除所有元素,我调用remove 算法,然后调用vector的erase成员函数来物理删除它.但是在list的情况下,简单的调用删除成员函数,它将删除具有该值的所有元素.我不确定为什么vector在列表执行时不提供删除MF.
对于Exp:我想从向量v中删除值"4".
vector<int> v;
vector<int> ::iterator Itr;
for (int i=0; i< 6; i++)
v.push_back(i*2);
v.push_back(4);
v.push_back(8);
v.push_back(4);
v.erase(remove(v.begin(),v.end(),4), v.end());
Run Code Online (Sandbox Code Playgroud)
和列表:
list.remove(4); // will delete all the element which has value 4
Run Code Online (Sandbox Code Playgroud)