“异常安全”有两个条件:
1、不泄露任何资源
可以通过以对象管理资源的方式(Item13)。
2、不允许数据败坏
异常安全函数提供以下三种保证之一
a、基本承诺
如果异常被抛出,程序内的任何事物都仍然保持在有效状态下,但是何种状态未知。
b、强烈保证
如果异常被抛出,程序状态不改变。
c 、不抛掷(nothrow)保证
注意:不要为了表示某件事情发生而改变对象状态,除非那件事情真的发生了。
copy and swap策略。
总结:异常安全函数即使发生异常也不会泄漏资源或允许任何数据结构败坏,这样的函数分为三种可能的保证,基本型,强烈型、不抛异常型。
“强烈保障”往往能够以copy and swap实现出来,但“强烈保证”并非对所有函数都可实现或具备现实意义。
函数提供的“异常安全保证”通常最高只等于其所调用之各个函数的“异常安全保证”中的最弱者。