Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Допустим я хочу создать массив в котором хранятся указатели на компоненты 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
По умолчанию

Я думаю, - массив все же нужно объявлять (до инициализации память все равно не съедается); потом в цикле инициализировать__
Код:
   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
По умолчанию

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

Если обявить так например:
Код:
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
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



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