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[]

  • 相关阅读:
    iOS 字符串遍历
    ImageView通过matrix实现手势缩放,放大,缩小 ,移动
    Xcode 清理存储空间
    iOS学习之字符串(NSString)的截取、匹配、分隔
    convertRect:toView: 和 convertRect:fromView:方法浅析
    社区团购很火爆,影响到小城市菜市场水果店的生意了
    工业级推荐系统 思维导图
    RecBole推荐系统思维导图
    Flink + 强化学习搭建实时推荐系统 思维导图
    传统开源推荐系统介绍思维导图
  • 原文地址:https://www.cnblogs.com/hwtxf/p/3529168.html
Copyright © 2011-2022 走看看