Item 38. Exception Safety Axioms

公理,公认之理,无需证明。
要证明一个欧几里得几何的定理,要借助于一系列的公理。
要判断代码是否是异常安全,也有一系列的公理可以借用。

------------------------------------------------------
1、异常是同步的 Exceptions Are Synchronous
异常是同步的,只能在函数调用时发生。
预定义类型的算法、赋值,以及其他底层的操作不会引发异常。(它们可能引发信号或中断,但那不较异常)

操作赋重载和模板使得判断异常变得复杂,因为经常难以确定一个操作是否会引发函数调用和潜在的异常。
例如对于用户定义类型String:
const char *a, *b;
String c, d;
//...
a = b; // no function call, no exception
c = d; // function call, maybe an exception

对于模板,事情变得更不确定:
template <typename T>
void aTemplateContext() {
    T e, f;
    T *g, *h;
    //...
    e = f; // function call? exception?
    g = h; // no function call, no exception
    //...
}
所以模板里的所有函数都得假定是一个函数调用,包括infix operators,和隐式转化。

2、析构是安全的 It's Safe to Destroy
通常,析构函数、operator delete 和 operator delete[] 不抛出异常。
所以如下的异常捕获没有必要:
X::~X() {
    try {
        delete ptr1_;
        delete ptr2_;
    }
    catch( ... ) {}
}

只需如此:
X::~X() {
    delete ptr1_;
    delete ptr2_;
}

3、交换不抛出异常 Swap Doesn't Throw

在使用STL的sort, reverse, partition等有交换的操作时,不用担心会引发异常。

Item 38. 异常安全之公理(Exception Safety Axioms)相关推荐

  1. Item 39. 异常安全之函数(Exception Safe Functions)

    Item 39. Exception Safe Functions 编写异常安全代码的难点不在于抛出和捕获异常,而是在于抛出和捕获之间要做的事情.当异常从抛出 到达捕获语句的过程中,这期间执行的函数在 ...

  2. java exception源码_Java异常之 Error 和 Exception

    简单了解 Java 异常 1.实际工作中,遇到的情况不可能是非常完美的. 比如:你写的某个模块,用户输入不一定符合你的要求: 你的程序要打开某个文件,这个文件可能不存在或者文件格式不对: 你要读取数据 ...

  3. Java的异常:Error与Exception

    Java的异常:Error与Exception 参考文章: (1)Java的异常:Error与Exception (2)https://www.cnblogs.com/heqiyoujing/p/11 ...

  4. Java异常:选择Checked Exception还是Unchecked Exception?

    Java包含两种异常:checked异常和unchecked异常.C#只有unchecked异常.checked和unchecked异常之间的区别是: Checked异常必须被显式地捕获或者传递,如B ...

  5. [转载] Java异常:选择Checked Exception还是Unchecked Exception?

    参考链接: Java中的已检查与未检查异常| checked或unchecked异常 Java包含两种异常:checked异常和unchecked异常.C#只有unchecked异常.checked和 ...

  6. Java异常之 Error 和 Exception

    简单了解 Java 异常 1.实际工作中,遇到的情况不可能是非常完美的. 比如:你写的某个模块,用户输入不一定符合你的要求: 你的程序要打开某个文件,这个文件可能不存在或者文件格式不对: 你要读取数据 ...

  7. java fatal exception_java,_运行异常:A fatal exception has occurred. Program will exit,java - phpStudy...

    运行异常:A fatal exception has occurred. Program will exit 问题: 此次异常主要是线上问题,没有直接操作服务器的权限.已知:集群其中一台正常可用,一台 ...

  8. Java异常:RuntimeException和Exception的区别

    Java设置了异常,旨在鼓励将方法中可能出现的异常告知给使用此方法的程序员.当然了,这种方法是比较优雅的,让我们确切的知道是在哪里出了错,并提供了异常捕获.本篇文章主要对Java中的异常进行介绍与区分 ...

  9. 关于异常捕获和Checked Exception

    最近在看Python,一个让我疑惑的地方,怎样确定Python的哪个库什么时候应该捕获哪种异常?用java习惯了之后,深深感动于java中Checked Exception的友好. 下面是在别的地方看 ...

最新文章

  1. u盘迷你linux,U盘上的迷你linux——BabyLinux
  2. 预写式日志(Write-Ahead Logging (WAL))
  3. java dump命令例子,常用命令示例
  4. epoll或者kqueue的原理是什么?
  5. mysql 隔行记录_php mysql数据输出实现隔行变色的简单示例
  6. 【英语学习】【WOTD】shanghai 释义/词源/示例
  7. 【LeetCode】【HOT】543. 二叉树的直径(递归)
  8. 零售的本质是什么呢?
  9. 查看手册命令 Oracle,ORACLE 数据库常用日常维护命令手册
  10. 【转】数字签名与数字证书
  11. 西门子PLC_s7-200免费学习视频教程
  12. 爱思唯尔(ELSEVIER)期刊LaTeX通用模板下载及使用技巧
  13. STM32cubeide代码自动补全教程
  14. android中使用hbuilder混合开发中提示未添加plugintest模块 请参考283
  15. Java基础面试题(2022版)
  16. 洪蜀宁-区块链原始大佬的文章-金丘区块链院长
  17. 揭秘蓝牙定位技术,实现精准室内导航
  18. elecworks 电缆型号管理器
  19. 小学计算机教海探航论文名字,教海探航获奖论文题目参考.doc
  20. kali软件更新与更新失败问题解决

热门文章

  1. redis sigterm 信号
  2. 最火爆ChatGPT知识星球分享,开启与GPT的神奇之旅
  3. AI教育公司物灵科技完成战略融资,商汤科技投资...
  4. 【课程】并行计算导论
  5. AJAX请求 $.ajaxSetup方法的使用
  6. 网络流(多样的建模)
  7. 用python来爬取网络小说
  8. float强转int
  9. B站容量管理:游戏赛事等大型活动资源如何快速提升10+倍?
  10. ICSL WEB攻击模式及防范方法