天天看点

main方法执行之前,做什么事

1、我们知道程序的入口是main方法,那么在执行main方法之前,需要做些什么准备工作呢?

2、main方法执行之前,必须要把non-local static对象构造完成。static对象有:全局对象,命名空间中的对象,类的static对象(从封装的角度看,类也是一个命名空间),方法内的static对象,其中方法中的static对象是local static对象,其他的是non-local static对象,这些对象分配在全局区,程序结束才释放内存。

3、local static对象直到方法被调用的时候,才进行初始化,而且只初始化一次。non-local static必须在main方法执行之前,进行初始化。

4、在一个编译单元内,non-local static对象按照声明顺序进行初始化。不同编译单元,non-local static对象的初始化顺序是不确定的。为什么?

  因为C++编译器做不到,C++支持单独分别编译,源代码的编译顺序是不确定的。因此,不要期望编译器按照某种顺序初始化non-local static对象,这是不可能的。

5、对于不同编译单元的non-local static对象A,B,我想先初始化A,在初始化B,怎么办?

  把A放在static方法中,暴露接口返回A的引用。

6、与之对应,main方法执行完毕,析构static对象。

继续阅读