Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
ВнизTList.Free Найти похожие ветки
← →
edge (2004-10-22 16:12) [0]
procedure TForm1.FormButton1Click(Sender: TObject);
type
PMyList = ^AList;
AList = record
I: Integer;
C: Char;
end;
var
MyList: TList;
ARecord: PMyList;
B: Byte;
Y: Word;
begin
MyList := TList.Create;
try
New(ARecord);
ARecord^.I := 100;
ARecord^.C := "Z";
MyList.Add(ARecord);
New(ARecord);
ARecord^.I := 200;
ARecord^.C := "X";
MyList.Add(ARecord);
for B := 0 to (MyList.Count - 1) do
begin
ARecord := MyList.Items[B];
Dispose(ARecord);
end;
finally
MyList.Free;
end;
end;
Пример взят из хелпа. Обязательно ли писать
for B := 0 to (MyList.Count - 1) do
begin
ARecord := MyList.Items[B];
Dispose(ARecord);
end;
ведь Free освобождает память и уничтожает указатели. Если обязательно, то можно вместо цикла написать MyList.Clear?
← →
begin...end © (2004-10-22 16:16) [1]
> Обязательно ли писать
Если хочешь, чтобы память освободилась, - обязательно.
> ведь Free освобождает память и уничтожает указатели
Память, занимаемая указателями, освобождается, в отличие от тех участков памяти, на которые эти указатели указывают.
← →
Digitman © (2004-10-22 16:20) [2]
> Free освобождает память и уничтожает указатели
указатели - да, уничтожает.
но TList не делает никаких предположений на счет того, ЧТО конкретно ассоциировано под данным указателем ... ты вполне мог создать объект и записать его адрес в элемент списка, а мог выполнить и Getmem() и New() .. для каждого случая класс TList должен был бы знать , какую из "разрушающих" п/пргограмм он должен был бы вызывать в каждом из конкретных случаев ... НГО ! класс TList хранит ТОЛЬКО адреса, и знать не5 знает, на ЧТО КОНКРЕТНО эти адреса указывают ... поэтому только ты сам волен определять, какую из "разрушающих" п/программ следует вызывать в том или ином конкретном случае
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.036 c