问题描述
在C/C++
语言执行过程中是不是所有的动作都由main()
函数引起,来看下面的代码:
#include <iostream>
class A{
public:
A() {
printf("This is Constructor\n");
}
~A() {
printf("This is destructor\n");
}
};
A a;
int main() {
printf("This is main\n");
}
这段代码很简单,但是最终是不是只是打印了This is main
这句话,显然不是,实际的结果是按照下面顺序的三句话:
This is Constructor
This is main
This is destructor
问题分析
首先main()
函数只不过是提供了一个函数入口,在main()
函数中的显示代码执行之前,会由编译器生成_main函数,其中会进行所有全局对象的构造以及初始化工作。简单来说对静态变量、全局变量和全局对象来说的分配是早在main()
函数之前就完成的,所以C/C++
中并非所有的动作都是由于main()
函数引起的。
同理在main()
函数执行后,程序退出,这时候会对全局变量和全局对象进行销毁操作,所以在main()
函数还会执行相应的代码。
在上面的例子中,a的构造函数会先执行,再执行main,最后会调用a的析构函数。