Avatar ·

الأقواس بعد اسم النوع في new: هل هناك فرق؟

مرحبًا بالجميع! بدأت تعلم لغة 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()` إذا كانت الفئة تحتوي على مُنشئ افتراضي؟ هل يمكن أن تؤثر الأقواس على ما إذا كان الكائن سيتم تهيئته أم لا؟ وكيف يرتبط هذا بالتهيئة التجميعية وقوائم التهيئة؟ أرجو التوضيح،