Nebula3学习笔记(3): 核心库

本文介绍了Nebula3框架中的核心库,包括基于引用计数的RefCounted基类,运行时类型信息系统(RTTI),智能指针,对象工厂和中央Server对象。讲解了如何利用这些机制进行多线程环境下的对象生命周期管理和类型安全。强调了智能指针在减少内存错误和提升代码可维护性方面的优势,同时提到了性能考虑和调试辅助工具。
摘要由CSDN通过智能技术生成
核心子系统
核心库(Core namespace)实现了这些特性:
  • 一个实现了引用计数的RefCounted基类
  • 一个运行时类型信息系统(RTTI)
  • 一个模板智能指针, 用于处理RefCounted对象的生命周期
  • 一个由类名创建C++对象实例的工厂机制
  • 一个中央Server对象用于建立基本的Nebula3运行环境
对象模型
Nebula3在C++对象模型的基础之上实现了下面这些新特性:
  • 基于引用计数和智能指针的生命周期管理
  • 基于类名或四字符编码的对象创建
  • 一个运行时类型信息系统
实现一个新的Nebula3类
当实现一个新的类时首先要考虑它是一个传统的C++类还是要从 Core::RefCounted继承. 以下几点可以帮你找到答案:
  • 如果这个类需要使用Nebula3的扩展对象特性, 如引用计数, RTTI等, 则它必须从Core::RefCounted继承.
  • 如果这个类是一个典型的小工具类, 如动态数组, 数学向量, 或其它相似的东西, 那么它从Core::RefCounted 继承也没有什么意义.
Core::RefCounted类继承有一些限制:
  • RefCounted派生类不应该在栈上创建对象, 因为栈对象的生命周期是由C++来管理的(他们会在离开当前上下文时被销毁, 从而绕过了Nebula3的引用计数生命周期 管理)
  • RefCounted的派生类只有一个默认的构造函数.
  • RefCounted的派生类必须有一个虚析构函数.
  • RefCounted的派生类不能进行拷贝, 因为这样会造成引用计数机制混乱.
要使用Nebula3的对象模型特性, 除了需要从 Core::RefCounted继承外, 还需要在头文件新类的声明中进行额外的标注:
一个标准的 RefCounted派生类一般这样声明:
 1: namespace MyNamespace
 2: {
 3: class MyClass : public Core::RefCounted
 4: {
 5:     DeclareClass(MyClass);
 6: public :
 7:     /// constructor
 8:     MyClass();
 9:     /// destructor
10:     virtual ~MyClass();
11:     ...
12: };
13: RegisterClass ( MyClass);
注意 DeclareClass()宏, 构造函数, 析构函数还有类外面的 RegisterClass()宏. DeclareClass()宏加入了RTTI和工厂机制所需的最小代价的信息, 它隐藏了Nebula3的对象模型, 希望可以在不影响已有类的基础进上进行内部机制的变更. RegisterClass()宏是可选的, 它把当前类在中央工厂进行注册. 如果你知道这个类永远不会由类名或四字符编码进行创建, 这个宏可以省略.
在这个类的.cpp文件里需要包含Nebula3特有的信息:
1: namespace MyNamespace
2: {
3: ImplementClass ( MyNamespace::MyClass, 'MYCL', Co
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值