Форум: "Начинающим";
Текущий архив: 2013.10.27;
Скачать: [xml.tar.bz2];
ВнизTList Найти похожие ветки
← →
vlad (2013-02-05 13:32) [0]Достаточно ли такого удаления из TList: List.Delete(i) если елементом списка является ссылка на структуру-запись память под которую выделялась через NEW или нужно так:
ARec = List[i];
Dispose(ARec);
и только потом List.Delete(i);
← →
O'ShinW © (2013-02-05 13:42) [1]судя по исходникам, список не освобождает сам
а только шлет уведомление
procedure TList.Notify(Ptr: Pointer; Action: TListNotification);
думаю, правильнее делать закат Солнца вручную :)
← →
Amoeba_ (2013-02-05 13:43) [2]Dispose - обязателен! List.Delete только удаляет запись из списка, но не освобождает занимаемую ей память.
Порядок может быть и
ARec = List[i];
Dispose(ARec);
List.Delete(i);
и
ARec = List[i];
List.Delete(i);
Dispose(ARec);
← →
Amoeba_ (2013-02-05 13:48) [3]
> O"ShinW © (05.02.13 13:42) [1]
>
> судя по исходникам, список не освобождает сам
Можно было в исходники и не смотреть, это и так ясно, как божий день. Ведь TList может хранить все что угодно: записи, объекты, и простые типы. И откуда ему знать что там конкретно, и, соответственно вызовом чего освобождать оное (и нужно ли в конкретном случае).
← →
vlad (2013-02-05 13:49) [4]
> Amoeba_ (05.02.13 13:43) [2]
>
> Dispose - обязателен! List.Delete только удаляет запись
> из списка, но не освобождает занимаемую ей память.
>
> Порядок может быть и
>
> ARec = List[i];
> Dispose(ARec);
> List.Delete(i);
>
> и
>
> ARec = List[i];
> List.Delete(i);
> Dispose(ARec);
Это и хотел узнать.
← →
Ega23 © (2013-02-05 13:49) [5]
> Достаточно ли такого удаления из TList: List.Delete(i) если
> елементом списка является ссылка на структуру-запись память
> под которую выделялась через NEW или нужно так:
Зависит от ситуации. Например, есть некий глобальный список чего-то-там. И есть список отфильтрованных записей. В случае глобального списка - надо освобождать. В случае ситуации с фильтром - не надо.
← →
Anatoly Pogoretsky (2013-02-05 13:57) [6]> Amoeba_ (05.02.2013 13:48:03) [3]
Достаточно было взглянуть
в справке
TPointerList = array[0..MaxListSize-1] of Pointer;
← →
O'ShinW © (2013-02-05 14:01) [7]
> Можно было в исходники и не смотреть, это и так ясно, как
> божий день.
Да. И так и писал, не заглядывая
for i := FRuleList.Count - 1 downto 0 do
begin
LocPER := FRuleList.Items[i];
Dispose(LocPER);
FRuleList.Delete(i);
end;
Но, теперь стало известно(мне, во всяком - теперь), что идет нотификация, чего я, например, не знал.
Т.е. на нее можно повесить код, и освобождать это дело не как
> закат Солнца вручную
а почти :) автоматически.
← →
Игорь Шевченко © (2013-02-05 14:23) [8]
> Т.е. на нее можно повесить код, и освобождать это дело не
> как
Если надо чистить один раз, то проще в цикле.
RTFS: Db.pas, TLookupList
← →
Ega23 © (2013-02-05 16:25) [9]Вот почему я class предпочитаю record-у. За TObjectList :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.10.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c