动态创建是CObject提供的第二大特性。创建一个类对象,new运算符就可以了。动态创建以RTCI为基础,根据类的CRuntimeClass来创建对象,主要用于对序列化的支持。
使用动态创建的步骤:
1、 从CObject派生。
2、 类声明中添加DECLARE_DYNCREATE宏,类实现中添加IMPLEMENT_DYNCREATE宏
示例:
用法:
1、 获取类的CRuntimeClass指针
2、 调用CRuntimeClass::CreateObject,创建类对象。
解析:
DECLARE_DYNCREATE声明了动态创建,它在RTCI基础上添加了一个静态成员函数CreateObject,这个成员函数是属于类的。它调用new运算符来生成新的对象。
DECLARE_DYNCREATE定义如下:
IMPLEMENT_DYNCREATE定义如下:
与RTCI相比,在CRuntimeClass中,动态创建多填写了一个成员变量m_pfnCreateObject,它是一个函数指针:
CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
用于指向类的CreateObject函数,在本例中传入的是CMyClass::CreateObject,这个函数是个静态成员函数。
动态创建的主要思想是从类的CRuntimeClass创建类对象,它调用CRuntimeClass::CreateObject函数。