Собираем
информацию
по крупицам
Статьи - Компьютерное

Программирование на C++ и Qt

Как в C++ сделать массив объектов, у которых конструктор имеет аргументы
23-10-2012
22:41:06

В этой статье размещена выжимка по вопросу о том, как создать массив объектов, у которых конструктор имеет аргументы. Ответ я искал очень долго, так как оказалось, что стандартных механизмов для создания массивов объектов с аргументами в C++ нет.

 

 

Вопрос

Есть объект, у которого конструктор имеет аргументы. Нужно создать массив таких объектов, скормив конструкторам одинаковые аргументы. Но вот не пойму, какой синтаксис надо использовать.

 

Массив объектов с конструктором без аргументов создать довольно просто:

 

element elements[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 );

 

В этом примере продемонстрированы основные действия по созданию массива объектов с аргументами в конструкторе - от создания массива до удаления.

 



К списку "Компьютерное"

Поделиться этой страницей


Статистика


RSS подписка

Подпишитесь на новости сайта по RSS


 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик