打造可复用的数据结构库——1 智能指针

1 为什么有智能指针

对于C/C++的程序,时刻要绷着一根玄,就是内存泄漏问题。这个工程肯定要用到指针。为了能方便后续程序的开发,先建立一个智能指针的类。这类应该满足:

    1. 指针的生命周期结束后,指针指向的内存也会随之释放
    1. 一段空间,只能有一个指针表示
    1. 杜绝指针的运算

2 设计方案

  • 1 利用C++ 语言的析构的功能,做一个C++的类。在这个指针类生命结束时,在析构函数里释放空间。
  • 2 利用对象模拟原生指针的行为。例如:重载指针的特征操作符 '->' 和

3 代码实现

3.1 类的内容

  1. 重载 ‘ * ’ 和 ‘ -> ’ 操作符,实现 指针的基本运算功能。

    T& operator * ();
    T* operator -> ();
  2. 设计拷贝构造函数和对 ’=‘的重载,实现一段内存只有一个指针标识的要求。

     SmartPointer& operator = (const  SmartPointer& obj   );
     SmartPointer( const SmartPointer&  obj  );

3.2 类的实现


  template< typename  T>
  class SmartPointer
  {
  protected:
     T*   m_pointer;
  public:
 ​
      SmartPointer( T*  p=nullptr  )
      {
        m_pointer = p;
      }
 ​
      SmartPointer( const SmartPointer&  obj  )
      {
         m_pointer= obj.m_pointer;
        const_cast< SmartPointer& >( obj).m_pointer =nullptr;
      }
 ​
      SmartPointer& operator = (const  SmartPointer& obj)
      {
          if( this != &obj)
          {
          delete m_pointer;
          m_pointer= obj.m_pointer;
          const_cast&  >( obj).m_pointer =nullptr;
          }
          return  *this;
      }
 ​
      T& operator * ()
      {
      return  *m_pointer;
      }
      T* operator -> ()
      {
      return m_pointer;
      }
 ​
      bool isNull()
      {
      return (m_pointer == nullptr) ;
      }
     ​
      T*  getPointer()
      {
      return m_pointer;
      }
     ​
      ~SmartPointer()
      {
      delete m_pointer;
      }
 ​
  };
  

你可能感兴趣的