Главная страница
    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.036 c
8-1079595546
Ziko
2004-03-18 10:39
2004.05.30
Рисование штриховых и пунктирных линий GDI толщиной > 1


1-1084942347
Алексей Петухов
2004-05-19 08:52
2004.05.30
Маштаб TBitMap


1-1084527897
Korefey
2004-05-14 13:44
2004.05.30
SQL объединение столбцов.


3-1083730588
Kate
2004-05-05 08:16
2004.05.30
Можно ли соединить записи из двух баз данных в одну?


7-1082527197
ASMiD
2004-04-21 09:59
2004.05.30
Delphi и 3D ускорители





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский