编译环境:vc6.0
#include<iostream.h>
#include<stdlib.h>
class Sample
{
int i ;
public: int j;
Sample (int x)
{
i=x ;
}
~Sample()
{
cout<<"撤消"<<endl;
}
};
void main()
{
Sample a1(10) , a2(20);
exit(1) ;
cout<<"取消"<<endl;
}
可以发现运行上述函数之后并无输出;原因是main函数调用了exit() 函数,而它的作用是会删除所有的静态对象、刷新缓冲、关闭所有的 I/O 通道然后结束程序。然而对象a1,a2为局部变量,exit(1)

在VC6.0环境下,当main函数调用exit(1)退出时,静态对象会被析构,但局部变量不会。静态局部变量在exit后会调用析构函数,而全局变量即使在exit后也会析构。cout在退出时可能先于局部对象析构,导致无法输出,改用printf()可正常显示。不同编译器对析构函数的调用顺序可能有差异。
与调用析构函数的关系&spm=1001.2101.3001.5002&articleId=51315515&d=1&t=3&u=bb4df1d9f47e49479384ab9789288942)
7535

被折叠的 条评论
为什么被折叠?



