2.1. 概述
1998年修订的第一版C++标准只提供了一种智能指针: std::auto_ptr
。 它基本上就像是个普通的指针: 通过地址来访问一个动态分配的对象。 std::auto_ptr
之所以被看作是智能指针,是因为它会在析构的时候调用 delete
操作符来自动释放所包含的对象。 当然这要求在初始化的时候,传给它一个由 new
操作符返回的对象的地址。 既然 std::auto_ptr
的析构函数会调用 delete
操作符,它所包含的对象的内存会确保释放掉。 这是智能指针的一个优点。
当和异常联系起来时这就更加重要了:没有 std::auto_ptr
这样的智能指针,每一个动态分配内存的函数都需要捕捉所有可能的异常,以确保在异常传递给函数的调用者之前将内存释放掉。 Boost C++ 库 Smart Pointers 提供了许多可以用在各种场合的智能指针。