最近看《Exceptional C++》这本书,实在太好了~也终于知道了“异常安全”和“异常中立”这两个东西的意思(其中“异常中立”我是第一次听到)。
说道异常安全,必须提到一个“不变性”问题。“不变性”一般是指一个对象,不论出现何种情况,这个对象还是能够保持某一种性质不变(有点像射影几何)。我的理解,主要就是不论如何出错,这个对象还是有效的、可用的。
异常安全就是对应这样的情况。异常安全是指,一个对象碰到异常之后,还能够保证自身的正确性(也就是出现异常后,对象还是有效、可用的)。惭愧的是,我以前对异常安全的理解似乎是,不抛出异常就是安全了。需要说明的是,C++ STL 的容器基本上都是异常安全的。
还有一种更严格的异常安全,叫做“强异常安全”。强异常安全不仅要求出现异常后对象要保证正确性,还要求对象不能作出任何改变,也就是实现“事务”的那种 commit-rollback 机制:要么成功,要么不改变。
异常中立,就是指任何底层的异常都会抛出到上层,也就相当于是异常透明的。
[美] Herb Sutter 著;卓小涛 译。《Exceptional C++中文版》。北京:中国电力出版社,2003年3月北京第一版。
阅读(3659) | 评论(2) | 转发(0) |