Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TList.Free [D7, Win2k]


edge ©   (2004-10-22 16:12:00) 


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?


Digitman   (2004-10-22 16:20:00) [1]


> Free освобождает память и уничтожает указатели


указатели - да, уничтожает.
но TList не делает никаких предположений на счет того, ЧТО конкретно ассоциировано под данным указателем ... ты вполне мог создать объект и записать его адрес в элемент списка, а мог выполнить и Getmem() и New() .. для каждого случая класс TList должен был бы знать , какую из "разрушающих" п/пргограмм он должен был бы вызывать в каждом из конкретных случаев ... НГО ! класс TList хранит ТОЛЬКО адреса, и знать не5 знает, на ЧТО КОНКРЕТНО эти адреса указывают ... поэтому только ты сам волен определять, какую из "разрушающих" п/программ следует вызывать в том или ином конкретном случае


begin...end   (2004-10-22 16:16:00) [2]


> Обязательно ли писать

Если хочешь, чтобы память освободилась, - обязательно.

> ведь Free освобождает память и уничтожает указатели

Память, занимаемая указателями, освобождается, в отличие от тех участков памяти, на которые эти указатели указывают.


Наверх

Титульная страница Поиск, карта сайта Написать письмо