यह वास्तव में बहुत आसान है। वर्ग/संरचना सदस्यों में डिफ़ॉल्ट कन्स्ट्रक्टर वाले ऑब्जेक्ट्स शामिल हो सकते हैं, लेकिन यदि वे नहीं करते हैं, और आप उन्हें प्रारंभिक सूची में एक मूल्य देने के लिए परेशान नहीं करते हैं, न ही उन्हें कन्स्ट्रक्टर के शरीर में सेट करते हैं, तो मूल रूप से वे स्मृति कब्जा - जो भी उनके लिए ढेर या ढेर से निकला था - वहां अभी भी पुरानी कचरा होगी, यानी एक अनिश्चित मूल्य।
पर विचार करें:
struct X
{
X() : x1(1) { x2 = 2; }
double x1, x2, x3;
std::string x4;
};
यहाँ, x1
और x2
स्पष्ट X
के निर्माता द्वारा initialised रहे हैं, और x4
- एक std::string
जा रहा है - डिफ़ॉल्ट "" होने का निर्माण किया है/लंबाई 0. , तथापि, कर सकते थे कुछ भी हो - और इसे सेट करने के बाद तक पढ़ा नहीं जाना चाहिए (यह अनिर्धारित व्यवहार है और वास्तव में कुछ प्रणालियों पर काट सकता है - मान लीजिए कि यह स्मृति की बिट पैटर्न एक डबल के लिए वैध मान भी नहीं हो सकती है, इसलिए पढ़ना इससे कुछ सीपीयू अपवाद/जाल/बाधा उत्पन्न हो सकती है)।
स्रोत
2010-12-08 04:09:37
मेरे पास सी ++ 03 की एक प्रति नहीं है। मैं इसे कहां से प्राप्त कर सकता हूं? – Bazinga
खंड में IOW "न ही कन्स्ट्रक्टर के शरीर के निष्पादन के दौरान प्रारंभ किया गया", सी ++ 03 मानक "प्रारंभिक" शब्द का उपयोग अनौपचारिक तरीके से "मूल्य निर्दिष्ट" करने के लिए करता है। –
@ बिंगा: आप इसे मुफ्त में नहीं प्राप्त कर सकते हैं। –