MFC动态创建

本文介绍了MFC中动态创建对象的过程,包括从CObject派生、声明和实现DECLARE_DYNCREATE及IMPLEMENT_DYNCREATE宏,以及如何使用CRuntimeClass创建对象。动态创建基于RTCI,主要用于序列化支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

    动态创建是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函数。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值