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;
    
    }
  • 相关阅读:
    MYSQL profiling分析语句
    进程状态与僵尸进程、孤儿进程
    Nginx跨域设置
    Redis的应用场景
    Nginx的作用
    cgi、fast-cgi和php-fpm的介绍(作用)
    CoreDump开启和Swoole Tracker 3.0配置
    好题总结
    Atcoder总结 Part III
    Atcoder总结 Part II
  • 原文地址:https://www.cnblogs.com/wolfrickwang/p/3260721.html
Copyright © 2011-2022 走看看