zoukankan      html  css  js  c++  java
  • 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;
    
    }
  • 相关阅读:
    HDU 2509 nim博弈
    HDU 1907 nim博弈变形
    HDU 1568 double 快速幂
    HDU 5950 矩阵快速幂
    HDU 1796 容斥原理
    Linux raid信息 查看
    Linux Ubuntu 内核升级
    Ubuntu 14.04 为 root 帐号开启 SSH 登录
    Google 分布式关系型数据库 F1
    分布式事务实现-Spanner
  • 原文地址:https://www.cnblogs.com/wolfrickwang/p/3260721.html
Copyright © 2011-2022 走看看