tengo un vector en una cabecera, así:¿Vaciar el vector global entre llamadas?
extern std::vector<Foo> g_vector;
En el archivo CPP asociado tengo esto:
std::vector<Foo> g_vector;
también tengo una clase Bar
, y en ella del constructor que se sumará algunas cosas para g_vector
, así:
Bar::Bar(/* stuff */)
{
// do things
std::cout << g_vector.size() << std::endl;
g_vector.push_back(somefoo);
std::cout << g_vector.size() << std::endl;
}
Si declarar una Bar
dentro de una función, como un cuerdo persona, parece funcionar bien. Sin embargo, si quiero declarar Bar
fuera de una función, suceden cosas raras. Por ejemplo, tengo un Bar
declarada en MyFile1.cpp y en MyFile2.cpp, y debido a mis instrucciones cout en Bar puedo ver la Foo
conseguir presionado en el vector, pero cuando se ejecuta la siguiente Bar
su constructor tamaño del vector es 0 de nuevo. En otras palabras, mi salida es
0
1
0
1
¿Qué ofrece? Para estar doblemente seguro, también intenté imprimir &g_vector
para asegurarme de que realmente era push_back
en el vector correcto, y todas las direcciones coinciden. Por lo que vale, no importa qué orden tengan estas cosas para el vector. No estoy preocupado con la orden de inicialización ni nada.
¿Tiene alguna razón para creer que su 'g_vector' conseguirá construidos antes de la instancia estática' bar' sean? – Gabe