Effective 阅读笔记---条款29"为异常安全而努力是值得的"

来源:互联网 发布:淘宝排名查询流量 编辑:程序博客网 时间:2024/05/17 08:15

1.概述
异常安全的函数有两个必要条件;
(1)不泄漏任何资源:当异常被抛出时,必须保证资源得到泄漏,解决办法是使用RAII 手法.书中的例子是互斥锁的例子,具体做法是将加锁的操作封装到一个类的构造函数中,而把解锁的操作封装到析构函数中,当发生异常时一定会调用析构函数执行解锁. 再一个是使用智能指针管理堆上的内存,也是RAII手法的使用.
(2)不允许数据败坏.
2.
异常安全函数提供以下三个保证之一
(1)基本承诺:
如果对象被抛出,程序内的任何事物仍然保持在有效状态下.
(2)强烈保证:
如果函数成功就完全成功,如果函数失败,程序会保证函数调用之前的状态.及函数调用的”事务”
性.
(3)不抛出异常的保证.承诺不抛出异常.比如对内置类型的操作都提供不抛出异常的保证.
一般的函数在基本保证和强烈保证之间进行抉择.

使设计拥有强烈保证的手法利用 pimpl 结合copy and swap,这时候会有copy的开销.
另外函数的异常安全性同样也依赖于的所调用的函数的异常安全性.如果被调用函数不提供任何的异常安全性保证,那么你的函数也不提供任何的异常安全性,但这不是函数设计者的锅.

阅读全文
0 0
原创粉丝点击