条款42 智能指针

在C++中,非常常用的一种技术就是智能指针,智能指针其实是RAII技术的一种应用,通过构建类类型实例的生命周期来管理指针,控制指针的初始化和资源释放。

具体而言,智能指针都需要重载-> 和 * 操作符,从而可以采用标准的指针语法来使用它们,有时候还有一些指针的运算操作符,+,-,+=,-=,++,--等等

通常智能指针会被实现为一个模板:

 

   1:  template <typename T>
   2:  class CheckedPtr
   3:  {
   4:  public:
   5:       explicit CheckedPtr(T *p):p_(p) {}
   6:       ~CheckedPtr(){ delete p_;}
   7:      T* operator*() { return get();}
   8:      T &operaot&() { return *get();}
   9:   
  10:  private:
  11:      T *p_;
  12:      T * get()
  13:      {
  14:          if(!p_)
  15:              throw NullCheckedPointer();
  16:              return p_;
  17:      }
  18:   
  19:      CheckedPtr( const CheckedPtr &);
  20:      CheckedPtr & operator = ( const CheckPtr &);
  21:   
  22:  // 私有复制和赋值操作符,是禁止赋值和复制;
  23:  }

他的使用与常用的方式一样;

   1:  CheckedPtr<classname>  pClass1( new classname);
   2:  CheckedPtr<classname> pClass2 = new classname;
   3:  (*pClass1).func1();
   4:  *pClass1 = classinstance;

要注意,我们在使用RAII中使用的是delete ,所以智能指针不能指向一个数组类型的变量,因为他的析构要采用delete[]

posted @ 2014-01-22 08:01  博海拾贝  阅读(264)  评论(0编辑  收藏  举报