为“异常安全的努力”是值得的——effective c++学习笔记

本文探讨了异常安全的两个核心条件:不泄露资源与不允许数据败坏,并详细介绍了三种异常安全保证:基本型、强烈型及不抛出异常型。此外,还提供了实现强烈保证的一种常用方法——copy-and-swap原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常安全的两个条件:

<!--[if !supportLists]-->1、 <!--[endif]-->不泄露任何资源。

<!--[if !supportLists]-->2、 <!--[endif]-->不允许数据败坏。

fopen函数进行封装。

异常安全函数提供下面的三个异常保证之一:

<!--[if !supportLists]-->1、 <!--[endif]-->基本承诺:如果异常被抛出,程序内的任何事物仍然保持在有效的状态下。没有任何对象或数据结构会因此而败坏,所有对象都处于一种内部前后一致的状态。

<!--[if !supportLists]-->2、 <!--[endif]-->强烈保证:如果异常被抛出,程序状态不改变。调用这样的函数需要有这样的认知:如果成功,则全部成功,如果失败,则全部失败。

<!--[if !supportLists]-->3、 <!--[endif]-->不抛出异常:承诺不抛出异常,因为他们总是能够完成他们之前承诺的功能。

不要为了表示某件事情发生而改变对象状态,触发那件事情真的发生了。

使用copy and swap原则保证强烈保证:为你打算修改对象(原件)做出一个副本,然后在副本上进行修改。如果抛出异常,源对象仍保持未改变状态。如果未抛出异常,则将修改后的副本和原对象在一个不抛出异常的操作中置换。

请记住:

<!--[if !supportLists]-->1、 <!--[endif]-->异常安全函数及时发生异常也不允许泄露资源或运行数据结构败坏。这种函数区分为三种可能的保证:基本型,强烈型,不抛出异常型。

<!--[if !supportLists]-->2、 <!--[endif]-->“强烈保证”往往能够以“copy-and-swap”来实现,但强烈保证并非对所有函数都可实现或具备现实意义。

<!--[if !supportLists]-->3、 <!--[endif]-->函数提供异常安全保证通常只等于其所调用之各个函数的异常安全保证中的最弱者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值