看到DECLARE_DYNAMIC宏实际在类中加了两个东西,而第二个GetRuntimeClass()函数就是返回第一个CRuntimeClass对象,两个东西都是public, 那直接访问就好了,加这个函数有什么用呢?
摘自候捷的深入浅出第3章,part1,p126
// in header file
class CView : public CWnd
{
public:
static CRuntimeClass classCView; \
virtual CRuntimeClass* GetRuntimeClass() const;
...
};

解决方案 »

  1.   

    是为了访问安全,比如有以下函数CView *pView = ...;
    CWnd *pWnd = ...;void AccessWindow1(CWnd *pWnd)
    {
    CRuntimeClass* pRTC = pWnd->GetRuntimeClass();
    .....
    }void AccessWindow2(CWnd *pWnd)
    {
    CRuntimeClass* pRTC = &pWnd->classCView;
    .....
    }当调用AccessWindow1(pView);时,pView被cast成CWnd *指针,但是GetRuntimeClass是虚函数,从而使pRTC得到的仍是CView的classCView对象当调用AccessWindow2(pView);时,pView被cast成CWnd *指针,此时pRTC就是CWnd::classCView这就是区别和好处