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

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

 

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

 


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

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


Web - разработка » Как добавить Userscript в браузер Chrome

С удивлением обнаружил, что в интернете отсутствует информация на русском языке о том, как устанавливать в Chrome юзерскрипты. Я пользуюсь Chome тол...


Платформа 1C:Предприятие » 1С 8.2: Как установить сортировку по-умолчанию в динамическом списке

По неизвестным причинам, в интерфейсе конфигуратора 1С 8.2 отсутсвует возможность указать поле в динамическом списке, по которому должна идти сортиров...


Штучки-дрючки » Самодельный диафильм

Недавно я нашел в чулане диапроектор и коробку с диафильмами, которые много лет назад засунул на самую дальнюю полку. Увидев эти коробки, я тут же всп...

RSS подписка

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


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

Внимание!


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

 

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

База Rarrugas (1, 2)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean

База Аrmagedec

База SorokinRed

База Deadelf79

 

Требуют доработки:

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База Duwaz

 

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

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