全局对象的析构函数问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 17:08:56
#include<iostream>
using namespace std;
class AAA
{
public:
AAA(){ cout<<"AAA::AAA()\n"; }
~AAA(){ cout<<"AAA::~AAA()\n"; }
};
AAA a;
int main()
{ return 0;
}
上面代码只输出了一行:AAA::AAA()
但把cout改为printf之后,就输出了两行:
AAA::AAA()
AAA::~AAA()
为什么会这样的,是什么原因造成了这个区别。
等待牛人...

我可以这样告诉楼主:
一个程序由代码到exe文件的执行需要经过3步
预处理;编译;链接

构造函数的执行属于预处理阶段,析构函数是退出对本对象的调用时由系统自动执行,这都是依赖于具体的语言系统来实现的。对于VC6(我确定楼主一定是用的VC6),它在预处理阶段处理cout流对象和printf库函数这二者上,存在着差别,具体的差别很细节,我也不清楚,楼主也没必要知道。这就是你的程序cout与printf出现不同结果的原因。

经过我亲自实践,如果采用比较新的VS2005.NET系统,那么就会修正这个所谓的“BUG”(呵呵,我也不知道算不算)
在VS2005中,你的程序cout和printf结果都是一样的,都会输出:
AAA::AAA()
AAA::~AAA()