zoukankan      html  css  js  c++  java
  • 条款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[]

  • 相关阅读:
    (萌O(∩_∩)O)哈希知识点小结
    hash应用以及vector的使用简介:POJ 3349 Snowflake Snow Snowflakes
    BestCoder Round #3HDU 4907
    搜索:POJ2251&POJ1426&POJ3087&POJ2488
    母函数初学四大题
    欧拉函数知识点总结及代码模板及欧拉函数表
    欧几里德与扩展欧几里德算法以及青蛙的约会~
    KMP 知识点总结
    HDU 1142 A Walk Through the Forest(dijkstra+记忆化DFS)
    HDU 1535 Invitation Cards(SPFA,及其优化)
  • 原文地址:https://www.cnblogs.com/hwtxf/p/3529168.html
Copyright © 2011-2022 走看看