我知道析构函数不应该抛出异常。
http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.13
我有以下代码:
~a()
{
cleanup();
}
// I do not expect exception being thrown in this function.
// If exception really happen, I know that it is something not recoverable.
void a::cleaup()
{
delete p;
}
在我的静态源代码分析中,它抱怨我将以这种方式调用清理函数:
~a()
{
try {
cleanup();
}
catch(...) {
// What to do? Print out some logging message?
}
}
// I do not expect exception being thrown in this function.
// If exception really happen, I know that it is something not recoverable.
void a::cleaup()
{
delete p;
}
我不确定这是否是一个好习惯,只要它调用函数,就将 try...catch 块放在析构函数中。作为 :
(1) 如果清理函数能够抛出异常,我就知道发生了不好的事情。我更喜欢它是快速失败的。也就是让整个系统崩溃,让程序员去调试。
(2) 进入和退出 try...catch 块时发生开销。
(3) 代码看起来很麻烦,在类的析构函数周围有很多 try...catch 块。
我可能会错过其他一些要点,为什么 try...catch 块应该到位。
谢谢。