我有一個向量的頭,像這樣:全局向量在調用之間清空本身?
extern std::vector<Foo> g_vector;
在相關的CPP文件我有這樣的:
std::vector<Foo> g_vector;
我也有一類Bar
,並在它的構造也將增加有些東西g_vector
,像這樣:
Bar::Bar(/* stuff */)
{
// do things
std::cout << g_vector.size() << std::endl;
g_vector.push_back(somefoo);
std::cout << g_vector.size() << std::endl;
}
如果我宣佈一個Bar
一個函數裏,像一個理智人,它似乎工作正常。但是,如果我想在函數之外聲明Bar
,會發生奇怪的事情。例如,我在MyFile1.cpp和MyFile2.cpp中聲明瞭Bar
,並且由於我在Bar中的cout語句,我可以看到Foo
被推入向量中,但是當下一個Bar
運行其構造函數時,向量的大小爲0再次。換句話說,我的輸出是
0
1
0
1
什麼給?爲了加倍確保,我還嘗試打印出&g_vector
以確保它實際上是push_back
進入正確的向量,並且地址都匹配。對於它的價值,這些東西進入矢量的順序並不重要。我不關心初始化順序或任何東西。
你有什麼理由相信你的'g_vector'會在你的靜態'Bar'實例之前被構造? – Gabe