⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smartpointer.h

📁 CMXBTree 的主要作用是在内存中建立一棵B+树
💻 H
字号:
#ifndef _SMARTPONTER_H_
#define _SMARTPONTER_H_

class RefCount {
    int m_nRefs;
protected:
    virtual void DestroyMe( void ) = 0;
public:
    RefCount(void) { m_nRefs = 0; }
    //virtual ~RefCount() {  }
    void upcount(void) { ++m_nRefs; }//TRACE("up to %d\n", m_nRefs);}
    void downcount(void)
     {
        if (--m_nRefs == 0)
        {
            DestroyMe();
            //delete this;
        }
        //else
            //TRACE("downto %d\n", m_nRefs);
     }
};

template <class T> class SmartPtr {
    T* p;
public:
    SmartPtr(T* p_) : p(p_) 
    { 
        if( p ) p->upcount(); 
    }

    SmartPtr(SmartPtr<T> &p_)
    { 
        p = (T *) p_;
        if( p ) p->upcount(); 
    }

    
    SmartPtr( void ): p( NULL ) 
    {
    }
        
    ~SmartPtr(void) 
    { 
        if( p ) p->downcount(); 
    }

    operator T*(void) { return p; }

    T& operator*(void) { return *p; }

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

    SmartPtr& operator=(SmartPtr<T> &p_)
        {return operator=((T *) p_);}

    SmartPtr& operator=(T* p_) 
    {
        if( p ) p->downcount(); 
        p = p_; 
        if( p ) p->upcount(); 
        return *this;
    }
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -