Удаление динамически созданных объектов
Столкнулся с траблой, нужно удалить созданные ранее динамические объекты типа TImage имя у них разное image1, image2, imgae3...
Как к ним обратиться что бы удалить?
Спасибо.
TImage * img;
TComonentEnumerator enum=GetComponentEnumerator();
while(enum->MoveNext())
{
if((img=dynamic_cast<TImage*>enum->GetCurrent())!=NULL)
delete img;
}
for (int i = 1; i < FileCount; i++)
{
ime = new TIWImage(this);
AnsiString buff = "C:\\1\\1\\"+IntToStr(i)+".jpg" ;
ime->Picture->LoadFromFile(buff);
ime->Parent=IWRegion1;
ime->Name="Palat"+IntToStr(i);
ime->Width = 700;
ime->Height = 400;
ime->Left=90;
ime->Top = TopIm;
ime->OnAsyncClick=IWButton2->OnAsyncClick;
ime->Refresh();
}
for (int i = 1; i < FileCount; i++)
{
ime[i] = new TIWImage(this);
AnsiString buff = "C:\\1\\1\\"+IntToStr(i)+".jpg" ;
ime[i]->Picture->LoadFromFile(buff);
ime[i]->Parent=IWRegion1;
ime[i]->Name="Palat"+IntToStr(i);
ime[i]->Width = 700;
ime[i]->Height = 400;
ime[i]->Left=90;
ime[i]->Top = TopIm;
ime[i]->OnAsyncClick=IWButton2->OnAsyncClick;
ime[i]->Refresh();
}
ime->Free();
ime->Destroying();
А можете подсказать как определить создан объект или нет, это нужно перед удалением перед удалением.
Сначала заполни массив NULL и при удалении проверяй if(img[x]!=NULL) {delete img; img[x]=NULL;} но нежелательно так делать.
1) ну это чинится например вводом константы в цикл или массив динамическим сделать
for (int i = 1; i < FileCount; i++)//<==ХЗ сколько реально файлов
{
тогда вообще надо делать так:
///.....
ime=new TIWImage[FileCount];
///.....
delete [] ime;
Почему бы не использовать список?
ТС хочет извращений, не мешай ему :)
ПыСы я предлагал отказатся от такого, используя динамический массив (DynamicArray) но тс хочет проще сделать
А как я потом тогда смогу удалить, билдер не дает указать delete ime1; например так как этот объект еще не создан, он будет создан только в программе.((
Сначала заполни массив NULL и при удалении проверяй if(img[x]!=NULL) {delete img; img[x]=NULL;} но нежелательно так делать.
Определение создан ли объект не работает
я указываю:
if(ime!=NULL){delete ime;}
что это такое? Я по сути делаю веб страничку, и мне нужно чтобы отображались картинки, решил создавать их динамически для простоты, просто подхватывать все изображения для определенного раздела из папки, без всякой базы. А вот про auto_ptr не слышал.
Вот код создания объектов:
TIWImage * ime;
for (int i = 1; i < 15; i++)
{
ime[i] = new TIWImage(IWRegion1);
texte[i] = new TIWLabel(this);
AnsiString buff = "C:\\1\\1\\"+IntToStr(i)+".jpg" ;
ime[i]->Picture->LoadFromFile(buff);
ime[i]->Parent=IWRegion1;
ime[i]->Name="Palat"+IntToStr(i);
ime[i]->Cursor=crPointer;
ime[i]->Width = 700;
ime[i]->Height = 400;
ime[i]->Left=90;
ime[i]->Top = TopIm;
сделал функцию по удалению существующих объектов:
{
for (int i = 1; i < 50; i++)
{
if(ime[i])
{
ime[i]->Free();
texte[i]->Free();
}
}
}
Проблема в том что их хватает клика на 3 и вылетает ошибка(причем не важно какие разделы хоть один и тот же):
"Access violation at address 006158CB in module 'Intraweb_90_100.bpl'. Read of address 00000000C"
Подскажите как еще можно удалить созданные объекты зная их имя но не зная их количества, оно разное.
что это такое? Я по сути делаю веб страничку, и мне нужно чтобы отображались картинки, решил создавать их динамически для простоты, просто подхватывать все изображения для определенного раздела из папки, без всякой базы. А вот про auto_ptr не слышал.
О, Великий гугль - ауто_птр