Nebula中的RefCount类

RefCount类用为Nebula整个架构中的基类。

由以下几个方面构成。

1、Reference Count相关,主要管理引用计数相关,有个volatile int refCount的变量负责记录当前对象被引用次数,通过AddRef , Release等方法改变其值,当refCount变量为0时,会被自动释放掉。还有refCount值的改变是线程安全的.可以调用window的_InterlockedIncrement,_InterlockedDecrement等函数来完成。

 

2、RTTI相关

    主要由InstanceOf()和IsA()函数来负责。

    Nebula中每个类在声明的时候都会加上一个_DeclareClass(type)宏,在这个宏中,会自动为每个类加上一个static Core::Rtti 类型的变量,这个变量就标识了该类的类别信息。这个变量的初始化会在_ImplementClass宏中自动被填充。

     一个RTTI中包含Util::String型的类名,以及它的父类的RTTI对象的指针,一个FourCC类型的类名(FourCC其实就是一个uint型的标志,全局必须唯一),一个创建该类的函数指针,以及该类的size信息。这些信息都是是在类的h文件与cpp文件中通过_DelcareClass与_ImplementClass宏初始化的。

 

    在RTTI对象初始化时,不仅要保存相关信息,而且还要在全局的Factory类中注册类名,fourcc与对应的Rtti *指针

 

    整个Nebula架构中的RTTI功能都是由各个类的Rtti 对象来负责,由于Rtti中保存了整个nebula的树列表,故实现isInstanceOf与IsDerivedFrom等都很容易了

 

3、统计信息相关

     由于Refcount是整个类层次的基类,所以在这里加入了一些debug相关的信息。比如记录全局对象列表等等。

 

 

 

PS:每个类在声明的时候都有_DeclareClass,实现的时候有_ImplementClass宏,这两个宏可是作了不少事情的。

 

1、声明了这个类的静态RTTI对象,并初始化之。

2、重载了new , delete操作符

3、声明了类的Creator函数,类的实例都通过调用Creator函数来分配内存,分配内存的同时,通过重载的new与delete来使用特定的内存分配器。在Creator中,还可以管理线程同步。

4、声明判断类工厂是否已经注册的函数。

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值