Собираем
информацию
по крупицам

Программирование на 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 );

 

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

 


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

Интересное на сайте


Перевод документации Ext JS 4.2 » Ext JS 4.2. Часть 3.2: Создание приложения в файле app.js

  Создание приложения в файле app.js   В коде, написанном в предыдущем параграфе, видно, что в основной HTML-файл подключаются два *.js файл...


BASH » Cron Emulator

Многие системные администраторы Linux часто сталкиваются с одной и той же проблемой: при попытке запуска команды из-под демона Cron, она ведет себя не...


Flash-анимация » Клип клуба "Сакура"

Оборудование: Pentium-200MMX, RAM 32Мб Среда: Flash MX Год: 2002   Этот клип я создавал, преследуя две цели.   Первая цель - разобраться с ...

RSS подписка

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


О, смотри-ка какое хорошее место. Дайте два!

Внимание!

На этом сайте разрабатывается программа MyTetra и её родственные проекты.

Доступны к просмотру следующие базы знаний:

База Xintrea (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)

База Rarrugas (1, 2)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

 

Подробности на странице MyTetra Share.

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