smartpointer.h

来自「CMXBTree 的主要作用是在内存中建立一棵B+树」· C头文件 代码 · 共 67 行

H
67
字号
#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 + =
减小字号Ctrl + -
显示快捷键?