عنصر - جمع المصفوفات في لغة c++



لماذا C++ لا تسمح `new` لاستدعاء منشئ عند إنشاء المصفوفات (2)

يتيح القول أنك تقوم بإنشاء مجموعة من المعترضين على كومة الذاكرة المؤقتة مثل ذلك:

myClass * objectPtr = new myClass[10];

new فقط يستدعي المنشئ الافتراضي، و (بناء على قراءاتي) لا يسمح باستدعاء أي منشئ آخر.

هل هناك أي منطق وراء لماذا لا يمكن استدعاء أي منشئ آخر؟ يبدو أن من الأفضل أن تفعل شيئا من هذا القبيل

myClass * objectPtr = new myClass[10](12);

في مقابل

myClass * objectPtr = new myClass[10];
objectPtr[0] = myClass(12);
objectPtr[1] = myClass(12);
...

https://src-bin.com


Answer #1

لماذا C ++ لا تسمح new للاتصال منشئ عند إنشاء المصفوفات

نعم هو كذلك. انها مجرد مملة بعض الشيء:

struct my_class
{
    my_class() {}
    my_class(int, int) {}   
};

int main() 
{
  my_class* objectPtr = new my_class[3]{my_class(1,2),
                                        my_class(), 
                                        my_class(3,4)};
}

Answer #2

عادة لن ترغب في بناء نفس الكائن عدة مرات، وبالتالي يمكنك بناء العديد من الكائنات الافتراضية ومع حلقة for يمكنك تغييرها لاحتياجاتك.

طريقة أخرى يمكنك استخدامها هي:

myClass **ObjectPointers = new myClass*[NUMBER_OF_OBJECTS];
for (int i=0; i<NUMBER_OF_OBJECTS; ++i)
    ObjectPointers[i] = new myClass(1,2,3,...); # <-- non-default constructor

بهذه الطريقة يمكنك تخصيص بشكل حيوي مؤشرات للكائنات التي يمكنك بناء بشكل منفصل.





new-operator