• C++ 异常


    1、什么是异常?

      异常就是程序出现了错误。

    2、为什么设计异常?

      库(任何代码)的提供者检测出运行时出现的错误,但是不知道怎么处理。而库的使用者(客户)知道怎么处理这些错误,但是不知道何时发生(如果很明确知道何时发生,就可以在客户端处理了,不再留给库)。简单说,设计异常的目的就是:问题检测与问题处理相分离。

    3、使用错误码也可以表示错误,但是不好。为什么?

      a、缺乏语义;

      b、可以被忽略,异常不能被忽略,抛出异常不处理,会导致程序终止;

      c、缺乏调用堆栈的上下文;

      d、错误码必须一级一级传回去,异常可以跳级。

    4、catch是最先匹配,而不是最优匹配。因此,范围小的异常(具体的异常)放在前面,如果范围大的异常(抽象的异常)放在前面,会导致死代码。注意:C++ 没有finally

    5、C++异常结构,基类是exception,子类有:logic_error,runtime_error,bad_alloc,bad_exception,bad_cast,bad_typeid,ios::failure。

    6、构造方法可以抛出异常,但是由于部分构造的对象不会析构,因此存在资源泄漏的危险。所以,构造方法应该能够自我清理。

    7、析构方法绝对不要抛出异常,考虑下面的情况:

      a、集合离开生存,集合中的每个对象析构,假如每个对象析构都抛出异常,同时抛出了很多异常,会导致未定义行为。

      b、抛出异常,栈展开机制会让对象析构,这个时候析构有出现了异常,导致程序终止。

      因此,析构方法不要调用可能抛出异常的方法,因为析构方法不知道怎么处理。而应该留给客户端,客户端显式调用,知道怎么处理异常。

  • 相关阅读:
    Golang-字符串常用的系统函数
    35.HTML--网页自动跳转 5种方法
    34.js----JS 开发者必须知道的十个 ES6 新特性
    33. 禁止鼠标右键保存图片、禁止拖动图片
    32.js 判断当前页面是否被浏览
    31.JS实现控制HTML5背景音乐播放暂停
    30.get和post的区别
    29.html5 移动端开发总结
    28.json数组,select选择,input输出对应数据
    27.给input边框和背景颜色设置全透明
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3430840.html
Copyright © 2020-2023  润新知