Страница 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);
Иногда ошибка выскакивает
Из чего может быть?