Как говорится в заголовке, есть ли способ создать массив объектов динамического размера с новым, с этим условием, что я не хочу вызывать конструктор по умолчанию?
что-то типа :
myclass* myarray = new myclass(firstArgument, secondArgument)[32];
Как говорится в заголовке, есть ли способ создать массив объектов динамического размера с новым, с этим условием, что я не хочу вызывать конструктор по умолчанию?
что-то типа :
myclass* myarray = new myclass(firstArgument, secondArgument)[32];
Самый простой способ - не использовать new
, а использовать std::vector
, у которого есть конструктор, который может копировать-конструировать элементы вектора. Это рекомендуемый способ в большинстве случаев. Потребность в динамически выделяемом массиве вместо вектора — довольно редкий случай.
Если вам нужно использовать new (по какой-либо причине), то один из способов сделать это — выделить необработанную память, привести ее к типу вашего объекта, а затем использовать std::uninitialized_fill()
, чтобы скопировать и создать свои значения на месте.
std::vector
, вы должны использовать распределитель вектора, а не new
. +1 в любом случае.
- person Mike Seymour; 14.08.2013
если вам нужен динамический массив, вы можете использовать вектор, который также избавит вас от управления памятью.
Кажется, нет способа (или, по крайней мере, простого способа) сделать это (с новым).
после долгих поисков я придумал это решение:
USE VECTOR CLASS
на самом деле забудьте о новом и для своих типовых проектов используйте вектор. он имеет много преимуществ.
std::vector<myclass>
.std::Vector<myclass>(32, myclass(firstArg, secondArg));
. - person juanchopanza   schedule 14.08.2013