c++ primer plus 第16章string 类和标准模板库,16.2.1 使用智能指针
c++ primer plus 第16章string 类和标准模板库,16.2.1 使用智能指针
16.2.1 使用智能指针
这三个智能指针模板(auto_ptr、unique_ptr 和 shared_ptr)都定义了类似指针的对象,可以将 new 获得(直接或间接)的地址赋给这种对象。当智能指针过期时,其析构函数将使用delete来释放内存。因此,如果将new 返回的地址赋给这些对象,将无需记住稍后释放这些内存:在智能指针过期时,这些内存将自动被释放。图 16.2说明了 auto_ptr 和常规指针在行为方面的差别;share_ptr 和 unique_ptr 的行为与 auto_ptr 相同。
要创建智能指针对象,必须包含头文件memory,该文件模板定义。然后使用通常的模板语法来实例化所需类型的指针。例如,模板 auto_ptr 包含如下构造函数:
template<class X>class auto ptr{
public:
explicit auto ptr(X*p=0)throw();
...}
本书前面说过,throw()意味着构造函数不会引发异常:与auto_ptr 一样,throw()也被摒弃。因此,请求X类型的 auto_ptr将获得一个指向X类型的 auto_ptr:
auto ptr<double> pd(new double);//pd an auto ptr to double
//(use in place of double * pd)
auto ptr<string>ps(new string);//ps an auto ptr to string
//(use in place of string *ps)
new double 是 new 返回的指针,指向新分配的内存块。它是构造函数 auto_ptr的参数,即对应于原型中形参p的实参。同样,newstring