MyTetra Share
Делитесь знаниями!
Как сделать массив объектов, у которых конструктор имеет аргументы
Текстовые метки: C++, Си++, new, создать, массив, объект, конструктор, аргументы
Раздел: Компьютер - Программирование - Язык 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.62
Яндекс индекс цитирования