MFC在产生CMyWinApp对象的过程中再次对this指针感到疑惑,请指教
///////////////////// my.cpp ///////////////
CMyWinApp theApp;
void main()
{
CWinApp* pApp = AfxGetApp();
}
////////////////////// my.h ////////////////
class CMyWinApp : public CWinApp
{
public:
CMyWinApp::CMyWinApp() {
cout << "CMyWinApp Constructor \n";
}
CMyWinApp::~CMyWinApp() {
cout << "CMyWinApp Destructor \n";
}
};
////////////////// mfc.h ///////////////
class CObject
{
public:
CObject::CObject() {
cout << "CObject Constructor \n";
}
CObject::~CObject() {
cout << "CObject Destructor \n";
}
};
class CCmdTarget : public CObject
{
public:
CCmdTarget::CCmdTarget() {
cout << "CCmdTarget Constructor \n";
}
CCmdTarget::~CCmdTarget() {
cout << "CCmdTarget Destructor \n";
}
};
class CWinThread : public CCmdTarget
{
public:
CWinThread::CWinThread() {
cout << "CWinThread Constructor \n";
}
CWinThread::~CWinThread() {
cout << "CWinThread Destructor \n";
}
};
class CWinApp : public CWinThread
{
public:
CWinApp* m_pCurrentWinApp;
public:
CWinApp::CWinApp() {
cout << "CWinApp Constructor \n";
m_pCurrentWinApp = this;
}
CWinApp::~CWinApp() {
cout << "CWinApp Destructor \n";
}
};
// global function
CWinApp* AfxGetApp();
为了产生全局对象theApp,从基类开始构造,依次是
CObject Constructor
CCmdTarget Constructor
CWinThread Constructor
CWinApp Constructor
CMyWinApp Constructor
然后全局对象theApp才产生,那么在CWinApp的构造函数里:
CWinApp::CWinApp() {
cout << "CWinApp Constructor \n";
m_pCurrentWinApp = this;
}
这个this指向哪里(哪个对象),this应该只能指向对象吧, 应该不是CMyWinApp的对象,因为它的对象还没有产生(构造函数还没有执行).
然后看main里的全局函数AfxGetApp()调用,它的定义是:
CWinApp* AfxGetApp()
{
return theApp.m_pCurrentWinApp;
}
当然,进入main前theApp已经产生了,它继承了CWinApp里的数据成员m_pCurrentWinApp,也就是theApp自己拷贝了一份,m_pCurrentWinApp在先前的CWinApp的构造函数里已经被赋值了,所以它拷贝的这份m_pCurrentWinApp里面也有那个this,接下来返回那个this给CWinApp* pApp
我现在的疑惑是那个this到底指向何方? 以前没仔细看程序,一直认为是指向theApp这个全局对象,当然现在我也是这样认为的,但好象不太符合逻辑,还是我哪里理解错了?