析构函数不应该抛出异常
-
如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。
-
通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。
当在某一个析构函数中会有一些可能(哪怕是一点点可能)发生异常时,那么就必须要把这种可能发生的异常完全封装在析构函数内部,决不能让它抛出函数之外
构造函数不应该抛出异常
构造函数在抛出异常后,会自动析构所有已经创建好的对象。如果所有已经创建好的对象都创建在了栈上,那么不会有内存泄露的问题。但是如果有对象是指针,并且指向了在堆上创建的内存,那么就会发生内存泄露,因为这时候仅仅是析构了指针,并没有释放堆上的内存。