मैं इस तरह कोड है:सी ++ पॉइंटर के लिए डिफ़ॉल्ट कन्स्ट्रक्टर क्या है?
class MapIndex
{
private:
typedef std::map<std::string, MapIndex*> Container;
Container mapM;
public:
void add(std::list<std::string>& values)
{
if (values.empty()) // sanity check
return;
std::string s(*(values.begin()));
values.erase(values.begin());
if (values.empty())
return;
MapIndex *mi = mapM[s]; // <- question about this line
if (!mi)
mi = new MapIndex();
mi->add(values);
}
}
मुख्य चिंता मेरे पास है, चाहे mapM [एस] अभिव्यक्ति संदर्भ वापसी होगी सूचक शून्य पर अगर नया आइटम मानचित्र में जुड़ना है?
SGI docs इस कहते हैं: DATA_TYPE & ऑपरेटर [] (स्थिरांक key_type & ट) वस्तु है कि एक विशेष कुंजी के साथ जुड़ा हुआ है के लिए एक संदर्भ देता है। यदि मानचित्र में पहले से कोई ऑब्जेक्ट नहीं है, तो ऑपरेटर [] डिफ़ॉल्ट ऑब्जेक्ट data_type() को सम्मिलित करता है।
तो, मेरे सवाल यह है कि डिफ़ॉल्ट वस्तु DATA_TYPE की प्रविष्टि() एक शून्य सूचक पैदा करेगा, या यह गलत सूचक स्मृति में कहीं ओर इशारा करते हुए बना सकते है?
मुझे बुरा नहीं लगता कि यह अमान्य है, लेकिन यह "सुरक्षित" होना चाहता है। आप आसानी से 0 सूचक की जांच कर सकते हैं और आप इसे "हटाएं" पर कॉल कर सकते हैं। इस बारे में पढ़ने के लिए कोई संदर्भ (यूआरएल)? –
मेरे पास हाथ में कोई संदर्भ नहीं है। लेकिन मुझे पूरा यकीन है कि एक पॉइंटर कन्स्ट्रक्टर इसे 0 तक शुरू करेगा (जैसे सभी इंटीग्रल प्रकारों, जैसे 'int',' short', ...)। –
सी ++ मानक, 8.5 अनुच्छेद 5: 'डिफ़ॉल्ट रूप से टाइप प्रकार के किसी ऑब्जेक्ट को प्रारंभ करने का अर्थ है: अन्यथा (न तो गैर-पीओडी और न ही सरणी), ऑब्जेक्ट शून्य-प्रारंभिक है।' बस ऊपर दी गई कुछ पंक्तियां: 'टाइप टी के किसी ऑब्जेक्ट को शून्य-प्रारंभ करने का अर्थ है: यदि टी स्केलर प्रकार (3.9) है, तो ऑब्जेक्ट को 0 (शून्य) के मान में सेट किया जाता है; उसी मानक में, 3.9, अनुच्छेद 10: 'अंकगणितीय प्रकार (3.9.1), गणना प्रकार, सूचक प्रकार, और सदस्य प्रकार (3.9.2) के सूचक, [...] सामूहिक रूप से स्केलर प्रकार कहा जाता है।' तो हाँ, एक पॉइंटर डिफ़ॉल्ट रूप से 0 –