मैं बहुत की तरह एक शीर्षक में एक वेक्टर है,:ग्लोबल वेक्टर कॉल के बीच खुद को खाली कर रहा है?
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
घोषित करना चाहता हूं, तो अजीब चीजें होती हैं। उदाहरण के लिए, मेरे पास Bar
है MyFile1.cpp और MyFile2.cpp में घोषित किया गया है, और बार में मेरे कोउट स्टेटमेंट्स के कारण मैं Foo
को वेक्टर में धक्का दे सकता हूं, लेकिन जब अगला Bar
इसके कन्स्ट्रक्टर को चलाता है तो वेक्टर का आकार 0 है फिर। दूसरे शब्दों में, मेरा आउटपुट
0
1
0
1
क्या देता है? बस अतिरिक्त डबल होने के लिए, मैंने यह सुनिश्चित करने के लिए &g_vector
प्रिंट करने का भी प्रयास किया है कि यह वास्तव में सही वेक्टर में push_back
आईएनजी था, और सभी मिलान पते। इसके लायक होने के लिए, इससे कोई फर्क नहीं पड़ता कि इन चीजों को वेक्टर में किस क्रम में जाना है। मैं प्रारंभिक आदेश या कुछ भी नहीं चिंतित हूं।
क्या आपके पास यह मानने का कोई कारण है कि आपका 'g_vector' आपके स्थिर' बार 'उदाहरण से पहले बनाया जाएगा? – Gabe