首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

析构函数里的错误处理

2012-03-08 
析构函数里的异常处理在moreeffectC++的M11中指出:不要把异常抛出到析构函数之外。可我发现即使在析构函数

析构函数里的异常处理
在   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(晨星) ,必要的时候,就应该使用异常处理。

热点排行