Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 06.06.2012, 15:03   #1
Paleolit
Пользователь
 
Аватар для Paleolit
 
Регистрация: 27.05.2012
Адрес: В интернете
Сообщений: 14
Репутация: 10
По умолчанию Как создать динамический массив указателей на компоненты

Допустим я хочу создать массив в котором хранятся указатели на компоненты vcl (например на TChechBox), но мне заранее неизвестен сколько компонентов мне понадобится. Тогда я вместо:
Код:
TCheckBox* box[100];
Должен сделать так (n - сколько компонентов мне нужно создать):
Код:
TCheckBox* box = new TCheckBox[n]; //создаю динам массив указателей
//Я знаю что это очень похоже на само создание обекта:
//TCheckBox* box = new TCheckBox(this)
//Но мне же нужен массив а не обект
Компилятор при это ругается мол нету такого конструктора у TCheckBox.
Как же обяснить билдеру что мне нужен массив указателей а не обект?


Все сам решил
Вот:

Код:
void __fastcall TMainFrm::CreateComponent(TCheckBox* chk,String Caption,String Name){
 chk->parent = ProcList;
chk->Caption = Caption;
chk->Name = Name;
}
А вызываю так:
Код:
for (int i=0;i<n;i++){
CreateComponent(new TCheckBox(this),"Процесс"+String(i),"ChBox"+String(i));
}
__________________
Скажи мне на каком языке ты пишеш и я скажу тебе кто ты

Последний раз редактировалось Paleolit; 06.06.2012 в 15:34.
Paleolit вне форума   Ответить с цитированием
Старый 06.06.2012, 15:41   #2
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
Репутация: 49
По умолчанию

Я думаю, - массив все же нужно объявлять (до инициализации память все равно не съедается); потом в цикле инициализировать__
Код:
   TCheckBox *boxy[999] ;
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
     *boxy = new TCheckBox(this);
}
nick42 вне форума   Ответить с цитированием
Старый 06.06.2012, 15:57   #3
Paleolit
Пользователь
 
Аватар для Paleolit
 
Регистрация: 27.05.2012
Адрес: В интернете
Сообщений: 14
Репутация: 10
По умолчанию

Как память не съедаеться?

Если обявить так например:
Код:
TCheckBox* chk[999];
То при запуске программы из стека откусывается 999*sizeof(TCheckBox) байтов. Для хранения самого указателя тоже нужна ведь памят. Или я не прав?
__________________
Скажи мне на каком языке ты пишеш и я скажу тебе кто ты

Последний раз редактировалось Paleolit; 06.06.2012 в 16:00.
Paleolit вне форума   Ответить с цитированием
Старый 06.06.2012, 17:51   #4
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
Репутация: 49
По умолчанию

Я не хочу вас расстраивать, но... попробуйте запустить программу, у которой записано chk[2] и потом ее же с другим значением - chk[999] при открытом диспетчере задач. И сравните занимаемый объем при старте. По мере нажимания на клавишу создания ( = new TCheckBox(this) объем постепенно будет расти.
nick42 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать динамически массив указателей в Си aues Общие вопросы C/C++ 4 05.04.2012 21:33
как создать динамический массив в своем классе? like_cloud Общие вопросы Delphi 6 24.11.2010 10:13
Как создать многомерный динамический массив в Delphi? Velross Помощь студентам 3 06.01.2010 21:50
Подскажите, как создать динамический массив? snaem Общие вопросы .NET 9 14.05.2008 08:52


14:09.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.