Shared类的解析

3D应用的程序实现中,为了一个简单的目标:单一的资源通过实例化来复用,以节省内存的开销。实现这个目的,往往会用上一个类,Shared(可以是任何通得过编译器的名字,这里只是用常见的名字)。


class Shared
{
private:
    int    referenceCount;

protected:

    Shared() { referenceCount = 1; }

    virtual ~Shared() {}

public:
    int GetReferenceCount() const { return referenceCount; }
    
    int Retain() { return ++referenceCount; }
    
    virtual int Release()
    {
        int count = --referenceCount;
        if (count == 0) delete this;
        return count;
    }
};

解析:

1、referenceCount用来计算对象有多少在使用;

2、默认构造放在protected下,这样保证该类不能单独使用,但是子类继承后构造的时候能调用到父类的构造,因此计数能变成1;

3、Retain()方法是每个继承该类的类对象new出来后必须调用的一个方法,用来让这个复用的对象知道被引用了一次;

4、Release()方法用来做跟3相反的事情,不过不仅是计数减1,还会检查计算是否成0,如果是0了,就释放自己。

5、程序中一般有个Manager之类的东西,会定时查询,用GetReferenceCount()检查referenceCount,从而来实现对象在没有人用的时候释放。在外围看来就是实现了自动化。


// foreach object in manager's list:

if (pObject->GetReferenceCount() == 1)
{
    pObject->Release();    
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值