socketref,再见!高德

https://github.com/adoggie

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

常用链接

留言簿(54)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

    #include "btMutex.h"

template <typename T>
class SmartHandlePtr{
    struct Handle{
        Handle(){
            ptr = NULL;
            cnt = 0;
        }
        void*    ptr;
        int        cnt;
        btLock    lock;
        void    inc(){
            btScopeLock sl(lock);
            cnt++;
        }
        void    dec(){
            btScopeLock sl(lock);
            cnt--;
        }
    };
public:
    SmartHandlePtr(const T* p){
        _ph = new Handle;
        _ph->ptr =(void*) p;
        _ph->inc();
    }

    ~SmartHandlePtr(){
        if( _ph ){
            _ph->dec();
            if( _ph->cnt==0){
                T* p;
                p = (T*)_ph->ptr;
                if( p ){
                    delete p;
                }
                delete _ph;
            }           
        }
    }

    SmartHandlePtr(const SmartHandlePtr& shp){
        if( _ph ){
            _ph->dec();
            if( _ph->cnt==0){
                T* p;
                p = (T*)_ph->ptr;
                if( p){
                    delete p;
                }
                delete _ph;
            }           
        }
        _ph = _ph;
        _ph->inc();
    }
    bool operator==(const T* p) {
        return _ph->ptr == p;
    }
    bool operator==(const SmartHandlePtr& shp){
        return _ph == shp._ph;
    }

    T* operator->(){
        return (T*)_ph->ptr;
    }

    T* get(){
        if( _ph && _ph->ptr){
            return (T*)_ph->ptr;
        }
        return NULL;
    }

private:
    Handle*    _ph;
};
posted on 2007-02-23 22:39 放屁阿狗 阅读(1177) 评论(0)  编辑 收藏 引用 所属分类: C++/Boost/STL/Template

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理