博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 异常
阅读量:7121 次
发布时间:2019-06-28

本文共 710 字,大约阅读时间需要 2 分钟。

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、抛出异常,栈展开机制会让对象析构,这个时候析构有出现了异常,导致程序终止。

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

转载地址:http://iviel.baihongyu.com/

你可能感兴趣的文章
LAMP+LNMP视频教程
查看>>
Linux下创建与解压zip, tar, tar.gz和tar.bz2文件
查看>>
《微服务》九大特性重读笔记
查看>>
肯定赚钱的炒股软件
查看>>
基于嵌入式操作系统VxWorks的多任务并发程序设计(4)――任务间通信A
查看>>
MariaDB 10.0.X中,动态列支持 JSON 格式来获取数据
查看>>
Don’t Worry.Be Scruffy.
查看>>
针对敲诈病毒(WanaCrypt0r2.0)的应对方案
查看>>
tornado和subprocess实现程序的非堵塞异步处理
查看>>
性能压测诡异的Requests/second 响应刺尖问题
查看>>
ACT的摘要可以告诉我们的内容
查看>>
一款开源Office软件---Lotus Symphony在Linux系统下的应用
查看>>
51CTO博客——架起我与读者沟通、见面的桥梁[博友话题]
查看>>
c++内存优化:二级间接索引模式内存池
查看>>
一条长为L的绳子,一面靠墙,另外三边组成矩形,问此矩形最大面积能是多少?...
查看>>
保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护 2
查看>>
NetFlow是一种数据交换方式,提供网络流量的会话级视图,记录下每个TCP/IP事务的信息...
查看>>
阿里褚霸专访-揭秘技术男开挂升级的职业路径(回帖有奖)
查看>>
给Eclipse在线安装WTP
查看>>
EntityFramework 如何查看执行的 SQL 代码?
查看>>