编程语言
首页 > 编程语言> > c++别让异常逃离析构函数

c++别让异常逃离析构函数

作者:互联网

C++并不禁止析构函数吐出异常,但是并不鼓励这样做

1)原因

如果析构函数吐出异常,程序可能过早结束(比如某个函数调用发生异常,在回溯寻找catch过程中,每离开一个函数,这个函数内的局部对象会被析构,如果此时析构函数又抛出异常,前一个异常还没得到处理又来一个,因此一般会引起程序过早结束)。异常从析构函数中传播出去,可能会导致不明确的行为
知乎相关描述

2)如何解决

1.在析构函数中catch异常,然后调用abort终止程序。通过abort抢先置“不明确行为”于死地
2.在析构函数中catch异常,然后记录该失败,即吞掉异常(通常是个坏主意,因为这样压制了“某些动作失败”的重要信息。但是也比负担“草率结束程序”或”不明确行为带来的风险“好)
3.重新设计接口,让客户能够在析构前主动调用可能引起异常的函数,然后析构函数中使用一个bool变量,根据用户是否主动调用来决定析构函数中是否应该调用可能引起异常的函数,让客户拥有主动权(如果客户没有主动调用,那么当发生异常时也不应该抱怨,因为已经给出了客户自己处理异常的机会)

标签:调用,函数,程序,c++,逃离,析构,catch,异常
来源: https://blog.csdn.net/it_xiangqiang/article/details/113524534