美文网首页
31.析构函数可以抛出异常吗?为什么不能抛出异常?除了资源泄露,

31.析构函数可以抛出异常吗?为什么不能抛出异常?除了资源泄露,

作者: vbuer | 来源:发表于2018-09-04 17:32 被阅读15次

    C++标准指明析构函数不能、也不应该抛出异常。C++异常处理模型最大的特点和优势就是对C++中的面向对象提供了最强大的无缝支持。那么如果对象在运行期间出现了异常,C++异常处理模型有责任清除那些由于出现异常所导致的已经失效了的对象(也即对象超出了它原来的作用域),并释放对象原来所分配的资源, 这就是调用这些对象的析构函数来完成释放资源的任务,所以从这个意义上说,析构函数已经变成了异常处理的一部分。

    1. 如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。
    2. 通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。

    相关文章

      网友评论

          本文标题:31.析构函数可以抛出异常吗?为什么不能抛出异常?除了资源泄露,

          本文链接:https://www.haomeiwen.com/subject/msvgiftx.html