Форум: "Основная";
Текущий архив: 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