47、构造函数析构函数可否抛出异常
C++ 只会析构已经完成的对象,对象只有在其构造函数执⾏完毕才算是完全构造妥当。在构造函数中发⽣异常,控制权转出构造函数之外。因此,在对象 b 的构造函数中发⽣异常,对 象b的析构函数不会被调⽤。因此会造成内存泄漏。
⽤ auto_ptr 对象来取代指针类成员,便对构造函数做了强化,免除了抛出异常时发⽣资源泄 漏的危机,不再需要在析构函数中⼿动释放资源;
如果控制权基于异常的因素离开析构函数,⽽此时正有另⼀个异常处于作⽤状态, C++ 会调⽤terminate 函数让程序结束;
如果异常从析构函数抛出,⽽且没有在当地进⾏捕捉,那个析构函数便是执⾏不全的。如果析构函数执⾏不全,就是没有完成他应该执⾏的每⼀件事情。
Last updated