读书人

析构函数里的错误处理

发布时间: 2012-03-08 13:30:13 作者: rapoo

析构函数里的异常处理
在 more effect C++的M11中指出:不要把异常抛出到析构函数之外。可我发现即使在析构函数内部处理异常也会遇到一些问题。
Session::~Session()
{
try
{
logDestruction(this);
endTransaction(); // 结束database transaction
}
catch(...)
{}
}
如果logDestruction(this)函数里面抛出了异常,那么endTransaction()函数就得到不执行,这样或许可以根据logDestruction(this)函数和endTransaction()抛出的不同的异常类型在catch后分别处理。然而如果两个函数抛出同样类型的异常呢?

[解决办法]
呵呵,“不要把异常抛出到析构函数之外”并不说明“在析构函数内部处理异常就不会遇到问题”啊。楼主的疑问逻辑上不成立。

应该这样说:如果你发现某个类的析构函数总是难免抛出异常,那这个类该重新设计了。
宁可为这个类增加一个单独的“End”函数,而让析构函数变为空函数,也不要允许析构函数抛出异常。
[解决办法]
到我的bolg里看《C与C++中的异常处理》吧。
愿你远离“异常”
[解决办法]
qhgary(Gary),你说“同意楼上”,但偶不完全同意你。:P
偶只同意“析构函数坚决不能抛出异常”,不同意“尽量少在C++里面用异常处理”。
[解决办法]
我发现Blog中也能学到很多东西的。呵呵。
同意steedhorse(晨星) ,必要的时候,就应该使用异常处理。

读书人网 >C++

热点推荐