как я могу создать массив объектов динамического размера по новому без использования конструктора по умолчанию?

Как говорится в заголовке, есть ли способ создать массив объектов динамического размера с новым, с этим условием, что я не хочу вызывать конструктор по умолчанию?

что-то типа :

myclass* myarray = new myclass(firstArgument, secondArgument)[32]; 

person Shnd    schedule 14.08.2013    source источник
comment
Просто используйте std::vector<myclass>. std::Vector<myclass>(32, myclass(firstArg, secondArg));.   -  person juanchopanza    schedule 14.08.2013


Ответы (3)


Самый простой способ - не использовать new, а использовать std::vector, у которого есть конструктор, который может копировать-конструировать элементы вектора. Это рекомендуемый способ в большинстве случаев. Потребность в динамически выделяемом массиве вместо вектора — довольно редкий случай.

Если вам нужно использовать new (по какой-либо причине), то один из способов сделать это — выделить необработанную память, привести ее к типу вашего объекта, а затем использовать std::uninitialized_fill(), чтобы скопировать и создать свои значения на месте.

person dhavenith    schedule 14.08.2013
comment
Небольшое замечание: если вы реализуете std::vector, вы должны использовать распределитель вектора, а не new. +1 в любом случае. - person Mike Seymour; 14.08.2013
comment
@MikeSeymour: Заметил, отредактировал, жестко отразился на собственной тупости. Спасибо. - person dhavenith; 14.08.2013

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

справочник по вектору C++

person Roger Rabbit    schedule 14.08.2013

Кажется, нет способа (или, по крайней мере, простого способа) сделать это (с новым).

после долгих поисков я придумал это решение:

 USE VECTOR CLASS

на самом деле забудьте о новом и для своих типовых проектов используйте вектор. он имеет много преимуществ.

person Shnd    schedule 15.08.2013