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對象。