深入浅出二版P462-463对象动态生成?
在class CDocTemplate中定义了
CRuntimeClass * m_pDocClass;
然后在
CDocument *CDocTemplate::CreateNewDocument()
{............
CDocument* pDocument=(CDocument*)m_pDocClass->CreateObject();
....................
}
m_pDocClass所指的"运行时对象"中的 m_pfnCreateObject是什么呢?
如果为NULL,则不能生成对象。是否"运行时对象"一定要初始化,然后
调用以上函式生成一个对象,再强制转化成文档指针?
请各位朋友指教一二?
注:对象即“物件”。
问题点数:30、回复次数:3Top
1 楼joke100(咱们去SLEEP吧...)回复于 2001-03-14 18:09:00 得分 0
凡是可以动态创建的类都必须有一个没有任何参数的构造函数,用来在动态创建过程中使用.
m_pfnCreateObject就是指向这个构造函数的函数指针.
在MFC中凡在类中使用DECLARE_DYNAMIC宏以及DECLARE_DYNCREATE 和DECLARE_SERIAL的都是支持动态创建的类,这三个宏的功能实际上逐个递增的.
将宏展开可以看到用于动态创建的构造函数声明以及定义,定义在相应的IMPLEMENT_XXXX宏中Top
2 楼joke100(咱们去SLEEP吧...)回复于 2001-03-14 18:17:00 得分 0
CRuntimeClass类有一个成员函数叫CreateObject,它实际上调用的就是前面所提的那个没有任何参数的构造函数,如果没有即为NULL,则不能动态创建该类的实例,CreateObject方法将返回NULL.Top
3 楼joke100(咱们去SLEEP吧...)回复于 2001-03-14 18:22:00 得分 30
另外,按照编译器的特性,如果你没有在类中显式的定义上面所提到的缺省构造函数,编译器会为你生成一个,一般来讲普通情况下都可以由它来生成,但是如果你的类中有一些特殊的指针成员,编译器生成的只是一个使用浅拷贝的构造函数,也就是说自动生成的构造函数可能不合要求,在CreateObject的调用中可能会失败.Top




