cpp中,全局变量,为什么不会自动调用析构函数?

来源:百度知道 编辑:UC知道 时间:2024/06/18 03:19:03
正在看<深入浅出MFC>一书,按理说,全局的变量,可以自动调用它的构造函数,那也应该可以自动调析构函数才对啊,不知道是不是这样?为什么我在VC6上边试的,不会调析构函数?
#include <iostream>
using namespace std;

class A
{
public:
A()
{
cout<<"A constructor"<<endl;
}
~A()
{
cout<<"A destructor"<<endl;
}
};

A the;

void main(){}

//out:
A constructor

cout是对象,在A析构前它本身已经析构了,所以看不出来。你改用printf就可以看到了。

全局对象的构造函数是在main()函数之前调用的,析构函数是在main函数之后调用的。
你的析构函数没打印出来,是因为VC6编译器太老了,但是析构函数却是调用了,你换个别的环境吧,VC对C++标准支持不太好。

如果你非要在VC6先看到析构函数调用,将#include <iostream>
using namespace std;
这两句换成#include <iostream.h>试试。

可能有两个原因:

一个就是编译器的问题。
VC6太老了,很多C++标准都没有实现,现在最新的C++库boost都已经放弃了对VC6的支持。还是换个VC 2005或者2008吧

二就是,在程序里调用了ExitProcess()之类的会显示中断进程或者线程的函数,这样就跳过了全局对象的析构过程。