“异常处理”学习小结

        在我经历过的项目中,很少使用异常处理;对于问题的调试与追踪,基本上都是基于错误码和日志信息。
        这里的学习总结来自于<<C++编程思想 第2卷>>和网络,有很多问题的理解还需要实践经验。

在C语言中处理异常的3种方式:
        1) 在函数中返回错误信息;
        2) 使用标准C库中的信号处理系统,由函数signal()和raise()实现;
        3) 使用标准C库中的非局部跳转函数:setjmp()和longjmp()。

如果在C++中使用C的错误处理方式将会遇到的问题:
        信号处理方法signal()/raise()和函数setjmp()/longjmp()并不调用析构函数,所以对象不会被正确清理。
(顺便说下goto: 使用goto跳入某个作用域,或者使用longjmp()跳出某个作用域,然而这个作用域的栈中有某个对象需要析构时,程序的行为是不确定的)

C++中异常处理流程:
        1.设置一个try块;
        2.在try块中用关键字throw抛出异常;
        3.紧跟try块用异常处理器catch处理异常。

C++异常处理最大的用处:当异常抛出时,程序将做恰当的清理工作。

新名词解释:
        栈反解(stack unwinding):异常发生之前创建的局部对象自动被销毁。
        RAII(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值