new创建对象与用RUNTIME_CLASS动态创建对象有什么不同?
new创建对象与用RUNTIME_CLASS动态创建对象有什么不同?
是一样的吗?似乎不是一样的吧?
RUTIME_CLASS(MyClass)只是返回一个&MyClass::classMyClass.并没有动态创建什么东西啊!
如果大家看过《深入浅出MFC》就应该知道RUNTIME_CLASS是个什么东西了。
一下是CRuntimeClass的结构:
struct CRuntimeClass
{
// Attributes
LPCSTR m_lpszClassName;
int m_nObjectSize;
UINT m_wSchema; // schema number of the loaded class
CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
CRuntimeClass* m_pBaseClass;
// CRuntimeClass objects linked together in simple list
static CRuntimeClass* pFirstClass; // start of class list
CRuntimeClass* m_pNextClass; // linked list of registered classes
};
它是记载每个类的信息的,然后用DECLARE_DYNAMIC, DECLARE_DYNCREATE, or DECLARE_SERIAL
把这些信息串起来,这样的话,就会把MFC中从CObject派生来的类全部串起来,这样才会有我们以后的:消息流动,就是你不用指定方向他也能知道向哪里走;得到某个类的父与子等等。更重要的能够动态创建,就是你把窗口关掉后,下次打开的时候你不用再输入类名,以及相关的一些动作,他能自动创建相关窗口。
new和RUNTIEM_CLASS八杆子都打不着。
要说有联系就是,如果你new从CObject派生的类时,MFC会自动把类的相关信息记录下来。