2011-08-25 16 views
9

मुझे पॉइंटर्स के सरणी प्रारंभ करने में परेशानी थी। क्या मैं जीसीसी C++ (4.6.0) के साथ संकलन में पता चला है:सी ++ पॉइंटर सरणी प्रारंभिक सहायता

MyClass** a = new MyClass*[100]; 

हमेशा संकेत की सरणी initalize नहीं करता है। (समय यह किया से ज्यादातर मुझे अशक्त संकेत दिए गए जो मुझे उलझन की एक सरणी देना)

MyClass** a = new MyClass*[100](); 

करता है 0 (शून्य सूचक) को सरणी में सभी संकेत आरंभ कर देगा।

मैं जो कोड लिख रहा हूं वह विंडोज/लिनक्स/मैक/बीएसडी प्लेटफार्मों में पोर्टेबल होना है। क्या यह जीसीसी सी ++ कंपाइलर की एक विशेष विशेषता है? या यह मानक सी ++ है? मानक में कहां ऐसा कहता है?

+0

मुमकिन है आप 'MyClass ** एक = नए MyClass मतलब * [100]()'। हां, 'नया' प्रारंभकर्ता एक मानक सुविधा है। मैं बस एक डुप्लिकेट सवाल शिकार कर रहा हूँ। –

+0

काफी डुप्लीकेट नहीं है क्योंकि यह पूछता है कि क्यों नहीं (जो गलत है) क्यों: http://stackoverflow.com/questions/6717246/no-array-allocated-using- new-can-have-an-initializer .. लेकिन पर्याप्त बंद करो। बंद करने के लिए वोटिंग। –

+0

पहला संस्करण अनियमित स्मृति लौटाता है, जो निश्चित रूप से * शून्य हो सकता है (शून्य) यदि यह पहले अप्रयुक्त है। अधिकांश ओएस सुरक्षा कारणों से, प्रक्रिया में आवंटित स्मृति को साफ़ करते हैं। –

उत्तर

5

यह मान-प्रारंभिक मानक सी ++ है।

प्रासंगिक मानक सी ++ 98 और सी ++ 03 §5.3.4/15 में है। सी ++ 98 में यह डिफ़ॉल्ट-प्रारंभिक था, सी ++ 03 में और बाद में इसका मूल्य प्रारंभिकरण था। आपके पॉइंटर्स के लिए वे दोनों शून्य-प्रारंभिकता को कम करते हैं।

सी ++ 03 §5.3.4/15:

नए प्रारंभकर्ता रूप () की है, तो आइटम मूल्य प्रारंभ (8.5) है,

C++ 0x कि पैरा बजाय सीधे-प्रारंभ ” के लिए 8.5 की “ प्रारंभ नियम, जहां N3290 (एफ डी आई) में आप §8.5/16 में उन्हीं शब्दों का के बारे में पता लगाने के लिए संदर्भित करता है।

चीयर्स & hth।,

+0

महान जवाब! Exaclty मैं क्या उम्मीद कर रहा था। अब मैं डिफ़ॉल्ट/मूल्य/शून्य आत्मविश्वास से प्रारंभ कर सकता हूं। –

संबंधित मुद्दे