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

  • 相关阅读:
    GO学习-(17) Go语言基础之反射
    Go语言基础之time包
    Go语言标准库log介绍
    GO学习-(16) Go语言基础之文件操作
    GO学习-(15) Go语言基础之包
    GO学习-(14) Go语言基础之接口
    五种开源API网关实现组件对比
    Spring Junit4 Test
    Java泛型
    SQL 基本(Head First)
  • 原文地址:https://www.cnblogs.com/hwtxf/p/3529168.html
Copyright © 2011-2022 走看看