1. 问题自身:
在语法上,C++ 容许在析构中抛出异样,但异样解决,自身就是为了解决结构失败的状况。
当一个对象结构失败而抛出异样时,咱们该当利用析构函数,清理有效对象,并回收其资源,这是使程序强壮的重要伎俩。
2. 问题剖析:
从 1 可知,构造函数显然是能够抛出异样的。
进一步剖析,在析构函数中抛出异样,会呈现哪些状况:
(1)对象失常完结,在析构时,触发析构函数中的异样,打印异样信息,退出。在这种状况下,抛出异样并没有什么问题,析构函数的异样会被里面捕捉;当然,如果里面的程序没有持续开释残余的资源,可能会造成内存泄露。
(2)对象来到作用域之前,抛出异样,此时会调用析构函数,析构函数再抛出异样,此时之前的异样就不能被捕捉了,而且会造成程序 crash。
3. 问题总结:
那么,是否就不能够在析构函数中应用异样?
答案显然是否,在某些状况下,咱们不可避免的要在析构函数中应用异样,使程序仍然强壮的要害的关键在于,不要让异样逃离析构函数。能够用 try catch 吞掉异样。
当然,更好的实际是,就不要在析构函数中应用异样。