Вопрос
Есть объект, у которого конструктор имеет аргументы. Нужно создать массив таких объектов, естественно
скормив конструкторам одинаковые аргументы. Но вот не пойму, какой синтаксис надо использовать.
Пробую так (1,2,3 - аргументы):
element elements[100](1,2,3);
и вот так
element elements(1,2,3)[100];
В обоих случаях компиляция не проходит. Можно ли вообще такое сотворить?
Ответ
Чтобы такое сделать, надо вручную создать массив объектов. Для этого вначале выделяется память под массив объектов, а потом в этой памяти надо создать нужное количество объектов с нужными параметрами конструктора. В момент создания объектов можно задавать одинаковые параметры конструкторам, а можно и разные, например, по какому-нибудь алгоритму.
// Ручное создание массива объектов в C++
// Выделяется память для объектов класса Foo в количестве count
Foo *foos = (Foo*)operator new( sizeof( Foo ) * count ) );
// Создаются элементы массива (объекты) с нужными начальными аргументами
for(int i=0; i<count; ++i )
new( &foos[ i ] ) Foo( a, b );
...
// Удаление элементов
for( int i = 0; i < count; ++i )
foos[ i ].~Foo();
// И удаление начального указателя
operator delete( foos );