2011-03-20 5 views
8

निम्नलिखित पर विचार कोड:नए या नई [] ऑपरेटर

typedef SomeType type_t[2]; 
SomeType * arr1 = new type_t; //new or new[] ??? 
type_t * arr2 = new type_t[3]; //new or new[] ??? 

मानक जो new के संस्करण 1-सेंट और 2-nd मामलों (new या new[]) में बुलाया जाएगा मुताबिक और कैसे नष्ट करने के लिए arr1 और arr2 (delete या delete[] के साथ)?

+2

ईमानदार होने के लिए यह शायद खराब अभ्यास – deek0146

+0

यह निश्चित रूप से खराब अभ्यास है, और संभवतः किसी को सड़क पर सिरदर्द का कारण बनने का कारण बनता है। –

उत्तर

9

पहला मामला एक-आयामी सरणी आवंटित करता है, दूसरा मामला दो-आयामी सरणी आवंटित करता है। उनमें से दोनों को delete[] के माध्यम से जारी किया जाना चाहिए, अन्यथा आपको अपरिभाषित व्यवहार मिलेगा।

1

यह दोनों मामलों में new[] का उपयोग करेगा। SomeType के लिए operator new[] को परिभाषित करके और स्क्रीन पर कुछ प्रिंट करके आप इसे स्वयं सत्यापित कर सकते हैं। आप देखेंगे कि यह दोनों मामलों में मुद्रित किया जाएगा।

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

  • कोई संबंधित समस्या नहीं^_^