Nebula中的RefCount类

来源:互联网 发布:js判断是否为空对象 编辑:程序博客网 时间:2024/06/05 16:01

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、声明判断类工厂是否已经注册的函数。

 

 

 

 

原创粉丝点击