无论是全局变量,还是全局对象,程序在运行时,在加载main函数之前,就已经为全局变量或全局对象分配了内存空间。对一个全局对象来说,此时就会调用该对象的构造函数,构造该对象,并进行初始化。
至此,应该明白了先前穿件的Test程序的运行顺序,也就是为什么全局变量的theApp的构造函数会在WinMain函数之前执行了。那么为什么要定义一个全局对象theApp,让它在WinMain函数之前执行呢?该对象的作用是什么?
原因是:应用程序的实例是由实例句柄(WinMain函数的参数hInstance)来标识的。而对MFC程序来说,通过产生一个类的对象(CWinApp的对象)来唯一标识应用程序的实例。
每一个MFC程序有且仅有一个从应用程序类(CWinApp)派生的类。每一个MFC程序实例有且仅有一个该派生类的实例对象,也就是theApp全局对象。该对象表示了应用程序本身。
当一个子类在构造之前会先调用其父类的构造函数。因此,theApp对象的构造函数CTestApp在调用之前,会调用其父类CWinApp的构造函数,从而就把我们程序自己创建的类与Miscrosoft提供的基类关联起来了。CWinApp的构造函数完成程序运行时的一些初始化工作。
MFC程序的执行顺序
最新推荐文章于 2020-01-23 15:54:47 发布