Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

Удаление списка?   Найти похожие ветки 

 
Mishenka   (2004-05-17 01:11) [0]

Нужно ли при удалении списка удалять каждый его элеммент или вызова метода Free будет достаточно?


 
GuAV ©   (2004-05-17 01:13) [1]


> Нужно ли при удалении списка удалять каждый его элеммент
> или вызова метода Free будет достаточно?


зависит от того, что есть список


 
Mishenka   (2004-05-17 01:25) [2]

Список TList


 
Ihor Osov'yak ©   (2004-05-17 01:35) [3]

Вызов метода Free класса TList уничтожает экземпляр самого TList, но не те вещи, которые есть элементами списка. Нужно ли "освобождать" элементы списка, и как "осводождать" - зависит от задачи и природы самих элементов. Но точно можно сказать, что Delete для каждого элемента перед уничтожением списка вызывать совершенно ни к чему. Так как Delete удаляет ссылку из списка (не затрагивая саму "вещь", на которую указывает ссылка), из списка, который все равно будет уничтожен с помощью free.

Зы - обратите внимание, что я использовал слово "вещь" вместо "экземпляр обьекта" - так как экземпляр TList в общем случае содержит указатели на что угодно, или даже не указатели, и как "освобождать" это "что угодно" TList в принцыпе знать не может.


 
Rouse_ ©   (2004-05-17 01:37) [4]

Items у него идет от TPersistent

Смотрим добавление:
procedure TCustomListBox.SetItems(Value: TStrings);
begin
 if Style in [lbVirtual, lbVirtualOwnerDraw] then
   case Style of
     lbVirtual: Style := lbStandard;
     lbVirtualOwnerDraw: Style := lbOwnerDrawFixed;
   end;
 Items.Assign(Value);
end;


Смотрим деструктор класса:
destructor TCustomListBox.Destroy;
begin
 inherited Destroy;
 FCanvas.Free;
 FItems.Free;
 FSaveItems.Free;
end;


Смотрим следующий деструктор:
destructor TStrings.Destroy;
begin
 StringsAdapter := nil;
 inherited Destroy;
end;


А теперь видем то, что нас и интересует:
destructor TPersistent.Destroy;
begin
 RemoveFixups(Self);
 inherited Destroy;
end;


Которое можно расписать вот так:
procedure RemoveFixups(Instance: TPersistent);
var
 I: Integer;
 Fixup: TPropFixup;
begin
 if GlobalFixupList = nil then Exit;
 with GlobalFixupList.LockList do
 try
   for I := Count - 1 downto 0 do
   begin
     Fixup := Items[I];
     if (Fixup.FInstance = Instance) then
     begin
       Delete(I);
       Fixup.Free;
     end;
   end;
 finally
   GlobalFixupList.UnlockList;
 end;
end;


И еще чуть ниже:
procedure TObject.Free;
begin
 if Self <> nil then
   Destroy;
end;


Вывод: достаточно взглянуть на код...


 
Ihor Osov'yak ©   (2004-05-17 01:45) [5]

> Items у него идет от TPersistent

Или Вы ошиблисть веткой, или немного не того...


 
Rouse_ ©   (2004-05-17 01:53) [6]

> [5] Ihor Osov"yak ©   (17.05.04 01:45)
Опс... я не про то подумал... мои извинения...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.049 c
1-1084822229
zep
2004-05-17 23:30
2004.05.30
maskedit


11-1072004881
Vladimir Kladov
2003-12-21 14:08
2004.05.30
Версия 1.88


7-1082527357
defen
2004-04-21 10:02
2004.05.30
Wunexec


1-1085043923
proga
2004-05-20 13:05
2004.05.30
помогите с RaveReports


8-1079550487
Rediska
2004-03-17 22:08
2004.05.30
Как создать *.wav файл в Delphi ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский