当尝试和异常联系起来时这就更加重要了:没有std::auto_ptr这样的智能指针,每一个动态分配内存的函数都需要捕捉所有可能的异常,以确保在异常传递给函数的调用者之前将内存释放掉。Boost C++ 库的智能指针系列提供了许多可以用在各种场合的智能指针。
先介绍下一个专业词汇:RAII(Resource Application Immediately Initialize)资源申请即初始化。这也是智能指针的基本原理,智能指针只是这个习语的其中一例。智能指针确保在任何情况下,动态分配的内存都能得 到正确释放,从而将开发人员从这项任务中解放了出来。 这包括程序因为异常而中断,原本用于释放内存的代码被跳过的场景。用一个动态分配的对象的地址来初始化智能指针,在析构的时候释放内存,就确保了这一点。 因为析构函数总是会被执行的,这样所包含的内存也将总是会被释放。
无论何时,一定得有第二条指令来释放之前另一条指令所分配的资源时,RAII 都是适用的。许多的 C++ 应用程序都需要动态管理内存,因而智能指针是一种很重要的 RAII 类型。不过 RAII 本身是适用于许多其它场景的。