Avatar ·

नए में प्रकार के नाम के बाद कोष्ठक: क्या कोई अंतर है?

सभी को नमस्कार! मैंने C++ सीखना शुरू किया है और `new` ऑपरेटर के साथ एक अजीब चीज़ देखी। जब मैं किसी ऑब्जेक्ट के लिए मेमोरी आवंटित करता हूँ, तो मुझे दो विकल्प दिखते हैं: ```cpp int* p1 = new int; // बिना कोष्ठक के int* p2 = new int(); // कोष्ठक के साथ int* p3 = new int(42); // मान के साथ ``` या क्लासेस के लिए: ```cpp MyClass* obj1 = new MyClass; MyClass* obj2 = new MyClass(); MyClass* obj3 = new MyClass(42); ``` ऐसा लगता है कि तीनों विकल्प काम करते हैं, लेकिन मैंने देखा कि कुछ मामलों में `new int` और `new int()` अलग-अलग व्यवहार करते हैं। उदाहरण के लिए, मैंने पढ़ा कि बिल्ट-इन टाइप्स (int, double, आदि) के लिए `new int()` मेमोरी को शून्य से आरंभीकृत करता है, जबकि `new int` कचरा छोड़ देता है। क्या यह सच है? और यूज़र-डिफ़ाइंड क्लासेस के बारे में क्या? यदि क्लास में डिफ़ॉल्ट कंस्ट्रक्टर है, तो `new MyClass` और `new MyClass()` के बीच कोई अंतर है? क्या ऐसा हो सकता है कि कोष्ठक प्रभावित करें कि ऑब्जेक्ट आरंभीकृत होगा या नहीं? और यह aggregate initialization और initialization lists से कैसे संबंधित है? कृपया विस्तार से समझाएँ, क्योंकि मैं भ्रमित हूँ।