MyTetra Share
Делитесь знаниями!
Как сделать массив объектов, у которых конструктор имеет аргументы
Раздел: Компьютер - Программирование - Язык C++ (Си++)
Запись: xintrea/mytetra_syncro/master/base/0000000005/text.html на raw.github.com

Вопрос

Есть объект, у которого конструктор имеет аргументы. Нужно создать массив таких объектов, естественно скормив конструкторам одинаковые аргументы. Но вот не пойму, какой синтаксис надо использовать. Пробую так (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 );




Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования