3
我正在閱讀Scott Meyer的Effective C++書籍。其中,他提到了不同翻譯單位中非本地靜態對象的相對順序是不確定的。爲了演示,他給出了下面的例子。在一個文件中,C++非局部靜態對象在不同翻譯單元中交互的示例
class FileSystem {
public:
std::size_t numDisks() const;
};
extern FileSystem tfs;
在另一個文件中,
class Directory {
public:
Director() {
std::size_t disks = tfs.numDisks();
}
};
Directory tempDir();
我明白了爲什麼這可能是壞的,如果初始化順序是不確定的,因爲tempDir
調用它的構造函數之前tfs
可能不被初始化。
但是,我不明白爲什麼初始化順序是不確定的;特別是爲什麼有兩個翻譯單元。對於tfs
在第二個文件中使用,也不會第一個必須被包括在內,因此把兩個文件在同一個翻譯單元?
所以我的問題:有什麼問題我剛纔說的,或者什麼是靜態的非本地對象在不同的翻譯單元,其可能會由於初始化順序問題相互作用的一個例子嗎?