在本章中,我们详细研究了编写异常安全和错误安全代码的最佳C++模式之一。ScopeGuard模式允许安排一个任意的操作,即一段C++代码,在作用域结束时执行。这个作用域可以是一个函数、一个循环体,或者仅仅是插入程序中用于管理局部变量生命周期的一个作用域。这些在结束时执行的操作,其执行与否可以取决于作用域是否成功完成,而“成功”的定义则视具体情况而定。无论成功或失败是通过返回码,还是异常来表示,ScopeGuard模式都能同样良好地工作。不过。在异常情况下,可以自动检测到失败(而对于返回码,开发者必须明确指定哪些返回值代表成功,哪些代表失败)。我们观察到,随着使用更现代的语言特性,ScopeGuard模式也在不断演进。在其最佳形式下,ScopeGuard提供了一种简单且声明式的方法,来指定后置条件以及延迟执行的操作,例如清理或回滚,这种方式能够轻松地组合任意数量需要提交或撤销的操作。
下一章将介绍另一种非常具有C++特色的模式 —— 友元工厂。它是一种工厂模式,但与在程序运行时创建对象不同,它是在编译期间“制造”函数。