Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизОчищать ли список? Найти похожие ветки
← →
Студент_1234 (2012-07-13 20:24) [0]
procedure AddList(List: TList);
var
PInfo: PDIDeviceInstance;
begin
New(PInfo);
List.Add(PInfo);
end;
procedure CleanupList(List: TList);
var
i: LongInt;
begin
For i:= 0 to List.Count - 1 do
Dispose(List[i]);
end;
var
List: TList;
begin
List:= TList.Create;
try
AddList(List); // n-е кол-во раз.
finally
CleanupList(List); // *
List.Free;
end;
* - Вызывать ли эту функцию для очистки списка?
← →
DayGaik (2012-07-13 20:34) [1]Да.
Кстати твой код нерабочий.
Надо так:
Dispose(PDIDeviceInstance(List[i]));
А вообще для этих дел лучше наслодовать TList
← →
RWolf © (2012-07-13 21:04) [2]Нормальный код, процедуре Dispose не интересен тип указателя.
← →
Дмитрий С © (2012-07-13 21:54) [3]
> RWolf © (13.07.12 21:04) [2]
Вы неправы.
program Project5;
{$APPTYPE CONSOLE}
type
PSomeRecord = ^TSomeRecord;
TSomeRecord = record
Value: String;
end;
procedure Test;
var
TypedPtr: PSomeRecord;
UntypedPtr: Pointer;
begin
New(TypedPtr);
TypedPtr^.Value := "Foo";
UntypedPtr := TypedPtr;
Dispose(UntypedPtr);
end;
begin
ReportMemoryLeaksOnShutdown := True;
Test;
end.
← →
RWolf © (2012-07-13 23:49) [4]
> [3]
да, верно — Finalize при освобождениии памяти через бестиповый указатель не вызывается.
← →
Студент_1234 (2012-07-14 08:57) [5]Т.е. получается CleanupList нужно вызывать, + при этом указывая тип указателя?
procedure CleanupList(List: TList);
var
i: LongInt;
begin
For i:= 0 to List.Count - 1 do
Dispose(PDIDeviceInstance(List[i]));
end;
← →
Дмитрий С © (2012-07-14 14:19) [6]
> Студент_1234 (14.07.12 08:57) [5]
Да.
← →
Куку (2012-07-14 18:10) [7]~
System.Generics.Collections.TObjectList<TDIDeviceInstance>
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 8.91 c