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;
    
    }
  • 相关阅读:
    springboot整合solr8.0
    Java学习笔记之JFileChooser的简单使用
    bootstrap-fileinput插件,上传成功后事件
    centos7中安装mysql8.0
    linux下安装mysql
    IDEA集成JRebel热部署和远程调试
    Flume学习之路 (一)Flume的基础介绍
    android studio的安装和卸载
    彻底卸载mysql
    电脑重装系统后各种环境和工具的安装配置
  • 原文地址:https://www.cnblogs.com/wolfrickwang/p/3260721.html
Copyright © 2011-2022 走看看