windows核心编程 上的一个有关问题?

windows核心编程 上的一个问题???
本帖最后由 yangxuefeng09 于 2014-08-05 14:59:15 编辑
windows核心编程    上的一个有关问题?
windows核心编程    上的一个有关问题?
windows核心编程    上的一个有关问题?

上面说,下面的代码运行的时候,如果使用了ExitProcess(0);那么就无论是全局变量 g_GlobalObj还是局部变量 LocalObject,
都不会被析构。但是为什么程序运行结果显示全局变量被析构了????书上说错了吗???用的VS2010  

#include "stdio.h"
#include "windows.h"

class  CSomeObject
{
public:
CSomeObject()
{
printf("Constructor\r\n");
}

~CSomeObject()
{
printf("Destructor\r\n");
}
};


CSomeObject  g_GlobalObj;

void main(int Argc,char * Argv[])
{
CSomeObject   LocalObject;
ExitProcess(0);
}



windows核心编程    上的一个有关问题?
------解决方案--------------------
用printf代替cout确实观察到了现象

下断后发现析构函数是在卸载dll的时候调用的,也就是说ExitProcess在调用的时候会卸载所有的dll,而全局对象的析构的调用正好在微软的msvc系列dll中,因此得以调用。

由此推知,如果是静态链接,将不会出现这个情况。验证了一下,果然如此。

感谢楼主的发现