Страница 1 из 2
Очищение объектов
Добавлено: 18 окт 2006, 12:50
Лелик_1044
Допустим заносим в stringlist
3 Объекта
AddObject('1',someojbject1);
AddObject('2',someojbject2);
AddObject('3',someojbject3);
Как теперь их правиль очистить
Просто
Items.Clear
Или
for I:=0 to StringList.Items.Count-1 do
begin
FreeMemory(StringList.Items.Object);
StringList.Items.Object:=nil;
end;
end;
finally
StringList.Items.Clear;
end;
Добавлено: 18 окт 2006, 13:27
LAngel

Можно это легко проверить:
ctrl+click на Clear покажет нам реализацию этого метода:
Код: Выделить всё
procedure TStringList.Clear;
begin
if FCount <> 0 then
begin
Changing;
Finalize(FList^[0], FCount);
FCount := 0;
SetCapacity(0);
Changed;
end;
end;
Как мы видим - тут идет очистка только массива строк.
как вариант - можно создать свой класс-наследник TStringList и уничтожать объекты
Код: Выделить всё
TMyStringList = class(TStringList)
public
procedure Clear; override;
end;
implementation
procedure TMyStringList.Clear;
var
i: Integer;
begin
for i := 0 to Count-1 do
if Assigned(Objects[i]) then
Objects[i].Free;
inherited;
end;
Ну и все дополнительные функции типа Delete и т.д. описать подобным образом.
Добавлено: 18 окт 2006, 13:31
Duncon
Непомню как насчет stringlist, а вот TList нормально работает с объектами и сам за ними чистит, единственное четко не помню методы давно не работал с ним..
Добавлено: 18 окт 2006, 13:41
LAngel
Duncon, тоже не удаляет
Код: Выделить всё
procedure TList.Clear;
begin
SetCount(0);
SetCapacity(0);
end;
Добавлено: 19 окт 2006, 11:43
Duncon
Не не, там при пработе с объектом методы delete и Remove - вот он как раз данные типа Pointer рушит.. методы типа clear и Delete не освобождают память, только сам список..
Добавлено: 19 окт 2006, 14:40
Игорь Акопян
Лелик, хелп про Clear содержит:
Description
Call clear to empty the list of strings. All references to associated objects are also removed. However, the objects themselves are not freed.
Objects
освобождать вручную, нилить не обязательно
Добавлено: 19 окт 2006, 16:04
Duncon
Типа можно утечку памяти словить..
Добавлено: 19 окт 2006, 17:02
Лелик_1044
Т.е они получаются все время в памяти сидият?
Блин наткнулся напрогу одну, а там такой метод очищения стоит.
Добавлено: 20 окт 2006, 10:34
Duncon
Да сидят..
Юзай Remove
Re: Очищение объектов
Добавлено: 12 дек 2006, 19:01
Лелик_1044
FreeMemory(treeview.items.item.data);
Иногда ошибка выскакивает
Из чего может быть?