c++ 智能指针的简单实现

#include <iostream>
#include <string>
using namespace std;

namespace MySmartPtr
{
   class PtrCount;
   template<class T>
   class AutoPtr;
};

class PtrCount
{
private:
   int m_iptrCount;
public:
   PtrCount(int iNum = 0){m_iptrCount = iNum;} 
   ~PtrCount(){}
   int addRef(){return (++m_iptrCount);}
   int release(){return(--m_iptrCount);} 
};

template<class T>
class AutoPtr
{
private:
   T * m_RawPtr;
   PtrCount *m_ptrCount ;

public:

   AutoPtr(T *ptr = NULL){m_RawPtr = ptr;m_ptrCount = new PtrCount(1);}
   ~AutoPtr(){if(m_ptrCount->release() == 0) {delete m_RawPtr;delete m_ptrCount;}}

   T *operator-> (void) { return m_RawPtr;}
     T& operator *(void) { return *m_RawPtr;}


   AutoPtr & operator = (const AutoPtr<T> & pAutoPtr)
   {
      if(m_ptrCount->release() == 0) {delete m_RawPtr;delete m_ptrCount;}

      m_RawPtr = pAutoPtr.m_RawPtr;
      m_ptrCount = pAutoPtr.m_ptrCount;

      if (m_ptrCount) m_ptrCount->addRef();
      return *this;
    }
};


int main()
{
   AutoPtr<string> strAutoPtr(new string("智能指针测试"));
   cout<<(*strAutoPtr)<<endl;

   AutoPtr<string> strAutoPtr2(new string("复制测试指针"));
   cout<<(*strAutoPtr2)<<endl;

   strAutoPtr = strAutoPtr2;
   cout<<(*strAutoPtr)<<endl;
   return 0;

}
原文地址:https://www.cnblogs.com/wolfrickwang/p/3260721.html