Почему С++ не позволяет `new` вызывать конструктор при создании массивов

Предположим, вы создаете массив объектов на куче, например:

myClass * objectPtr = new myClass[10];

new вызывает только конструктор по умолчанию и (на основе моих чтений) не позволяет вызвать какой-либо другой конструктор.

Есть ли какая-то логика, почему new не может вызвать какой-либо другой конструктор? Казалось бы, лучше сделать что-то вроде

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

в отличие от

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

Ответ 1

Почему С++ не позволяет 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)};
}

Ответ 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

Таким образом вы динамически выделяете указатели на объекты, которые вы можете создать отдельно.