析构函数 异常 [转]

more effective c++提出两点理由(析构函数不能抛出异常的理由):

1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。

2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。

那么当无法保证在析构函数中不发生异常时, 该怎么办?

其实还是有很好办法来解决的。那就是把异常完全封装在析构函数内部,决不让异常抛出函数之外。这是一种非常简单,也非常有效的方法。  

~ClassName()

{

  try{

      do_something();

  }

  catch(){  //这里可以什么都不做,只是保证catch块的程序抛出的异常不会被扔出析构函数之外

   }

}

原链接:http://19542002.blog.163.com/blog/static/13393238220133201207244/

posted on 2013-10-19 23:36  風逍遥  阅读(153)  评论(0编辑  收藏  举报

导航