为啥有些 MFC 类不是从 CObject 派生的?

Posted

技术标签:

【中文标题】为啥有些 MFC 类不是从 CObject 派生的?【英文标题】:Why some MFC classes are not derived from CObject?为什么有些 MFC 类不是从 CObject 派生的? 【发布时间】:2010-04-07 09:50:17 【问题描述】:

通常大多数 MFC(基于窗口的类)都是从 CObject 派生的。 CObject 是做什么的? 为什么有些 MFC 类不需要从 CObject 派生?

【问题讨论】:

【参考方案1】:

根据MSDNCObject主要提供了这些功能:

序列化支持 运行时类信息 对象诊断输出 与集合类的兼容性

所以当这些都不需要时,就没有必要从CObject派生。 从CObject 派生时也涉及一些开销(DECLARE/IMPLEMENENT_SERIAL/DYNAMIC 宏),因此可能有比从CObject 派生更简单的方法。

【讨论】:

【参考方案2】:

MFC 文档很好地涵盖了这一点。 CObject 的文档描述了它的作用(序列化支持、运行时类信息等)。

Hierarchy Chart 是一个很好的概述,它显示了哪些类不是从 CObject 派生的。

您可以得出结论,不是从 CObject 派生的类是不需要它提供的服务的类。原因是多方面的:例如像 CFileTime 这样的类是一个简单的数据类型。

【讨论】:

以上是关于为啥有些 MFC 类不是从 CObject 派生的?的主要内容,如果未能解决你的问题,请参考以下文章

覆盖 CObList MFC 的复制构造函数

初识MFC----运行时类信息机制

MFC常用的类详细介绍

错误 C2248:“CObject::CObject”:当我在 MFC 中调用 hDC.SelectObject 函数时,无法访问在“CObject”类中声明的私有成员

C++/CLI 包装器尝试使用 MFC CObject 继承

初识MFC----动态创建机制