私は、ヘッダー内のベクトルを持っているので、同様に:私はこれを持って関連するCPPファイルでグローバルベクトルは呼び出し間で自身を空にしますか?
extern std::vector<Foo> g_vector;
:
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
を宣言したい場合は、変なことが起こります。たとえば、私はBar
をMyFile1.cppとMyFile2.cppに宣言していますが、Barの私のcoutステートメントのためにFoo
がベクターにプッシュされるのを見ることができますが、次のBar
がそのコンストラクタを実行するとベクトルのサイズは0再び。言い換えれば、私の出力は
0
1
0
1
となりますか?ちょうど余分なダブルを確認するために、私は&g_vector
を実際に印刷して、実際にpush_back
が正しいベクトルに入り、すべてのアドレスが一致していることを確認しました。それが価値あるものであれば、これらのものがベクターにどのような順序で入るかは関係ありません。私は初期化の順序などには関係しません。
静的 'Bar'インスタンスの前に' g_vector 'が構築されると思われる理由はありますか? – Gabe