Очищение объектов
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Допустим заносим в 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;
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;
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.

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;
С уважением, Lost Angel...
Непомню как насчет stringlist, а вот TList нормально работает с объектами и сам за ними чистит, единственное четко не помню методы давно не работал с ним..
Duncon, тоже не удаляет

Код: Выделить всё
procedure TList.Clear;
begin
SetCount(0);
SetCapacity(0);
end;
С уважением, Lost Angel...
Не не, там при пработе с объектом методы delete и Remove - вот он как раз данные типа Pointer рушит.. методы типа clear и Delete не освобождают память, только сам список..
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
Лелик, хелп про Clear содержит:
Objects освобождать вручную, нилить не обязательноDescription
Call clear to empty the list of strings. All references to associated objects are also removed. However, the objects themselves are not freed.

Типа можно утечку памяти словить..
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Т.е они получаются все время в памяти сидият?
Блин наткнулся напрогу одну, а там такой метод очищения стоит.
Блин наткнулся напрогу одну, а там такой метод очищения стоит.
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Да сидят..
Юзай Remove
Юзай Remove
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
FreeMemory(treeview.items.item.data);
Иногда ошибка выскакивает
Из чего может быть?
Иногда ошибка выскакивает
Из чего может быть?
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.