फ़ंक्शन static
चर का जीवनकाल पहली बार शुरू होता है [0] कार्यक्रम प्रवाह घोषणा का सामना करता है और यह कार्यक्रम समाप्ति पर समाप्त होता है। इसका मतलब यह है कि रन-टाइम को किसी पुस्तक को नष्ट करने के लिए अवश्य करना चाहिए, यदि वह वास्तव में निर्मित है।
इसके अतिरिक्त, चूंकि मानक कहता है कि स्थैतिक वस्तुओं के विध्वंसक को उनके निर्माण के पूर्ण होने के विपरीत क्रम में चलना चाहिए [1] , और निर्माण का क्रम विशिष्ट कार्यक्रम चलाने पर निर्भर हो सकता है, निर्माण के क्रम को ध्यान में रखा जाना चाहिए। ।
उदाहरण
struct emitter {
string str;
emitter(const string& s) : str(s) { cout << "Created " << str << endl; }
~emitter() { cout << "Destroyed " << str << endl; }
};
void foo(bool skip_first)
{
if (!skip_first)
static emitter a("in if");
static emitter b("in foo");
}
int main(int argc, char*[])
{
foo(argc != 2);
if (argc == 3)
foo(false);
}
आउटपुट:
C:> sample.exe
foo में बनाया गया foo में
नष्ट
सी:> sample.exe 1
निर्मित में अगर
foo में बनाया गया
foo में नष्ट कर दिया
है, तो में नष्ट कर दिया
सी:> sample.exe 1 2
foo में बनाया गया
में बनाया गया है, तो
अगर में नष्ट कर दिया
foo में नष्ट कर दिया
[0]
चूंकि C ++ 98 [2] में कई थ्रेड्स का कोई संदर्भ नहीं है कि यह बहु-थ्रेडेड वातावरण में कैसे व्यवहार किया जाएगा अनिर्दिष्ट, और रोडी उल्लेख के रूप में समस्याग्रस्त हो सकता है ।
[1]
C ++ 98 सेक्शन 3.6.3.1
[basic.start.term]
[2]
C ++ 11 स्टैटिक्स में एक थ्रेड सुरक्षित तरीके से इनिशियलाइज़ किया जाता है, इसे मैजिक स्टैटिक्स के रूप में भी जाना जाता है ।