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



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

------解决方案--------------------
用printf代替cout确实观察到了现象
下断后发现析构函数是在卸载dll的时候调用的,也就是说ExitProcess在调用的时候会卸载所有的dll,而全局对象的析构的调用正好在微软的msvc系列dll中,因此得以调用。
由此推知,如果是静态链接,将不会出现这个情况。验证了一下,果然如此。
感谢楼主的发现
上面说,下面的代码运行的时候,如果使用了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);
}
------解决方案--------------------
用printf代替cout确实观察到了现象
下断后发现析构函数是在卸载dll的时候调用的,也就是说ExitProcess在调用的时候会卸载所有的dll,而全局对象的析构的调用正好在微软的msvc系列dll中,因此得以调用。
由此推知,如果是静态链接,将不会出现这个情况。验证了一下,果然如此。
感谢楼主的发现