剑孤寒的小站

人生的价值不是用时间,而是用深度去衡量的!
posts - 75, comments - 290, trackbacks - 0, articles - 0
用这个东东可以简化一些引用计数方面的管理,不过从Get*()接口获取的资源还是要先自己调一下AddRef()函数

class CRefCountHelper
{
public:
    template
<typename T>
    
static shared_ptr<T> Create(T *p)
    
{
        shared_ptr
<T> ptr(p, RefReleaseFunc());
        
return ptr;
    }


private:
    
struct RefReleaseFunc
    
{
        
void operator()(gge::ggeRefCounter *p) 
        
{
            if (p) p->Release();
        }

    }
;
}
;

用法如下:
//假设以前有一段代码是要载入一个texture到一个sprite上,例如下面这段代码:

ggeTexture 
*tex = Texture_Load("image.png");
if (!tex) return false;

ggeSprite 
*spr = Sprite_Create(tex);
if (!spr)
{
    GGE_RELEASE(tex);
    
return false;
}

//现在的写法可以改成下面这样,不用再去人肉Release了

shared_ptr
<ggeTexture> tex = CRefCountHelper::Create( Texture_Load("image.png") );
if (!tex) return false;

shared_ptr
<ggeSprite> spr = CRefCountHelper::Create( Sprite_Create(tex.get()) );
if (!spr) return false;



只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理