Dispose, процедура
Синтаксис
procedure Dispose(var P:   Тип указателя);
procedure Dispose(var P: ^object; Деструктор);
 
Описание
  Память, выделенная с помощью процедуры  New, 
  должна быть освобождена процедурой Dispose, которая игнорирует попытку освободить 
  нулевой указатель. Если вы попытаетесь освободить указатель, который уже был 
  освобожден или не был выделен с помощью процедуры  New, 
  результат непредсказуем. Dispose не является настоящей процедурой. 
  При освобождении экземпляра "старого" объекта также можно указать 
  в качестве второго аргумента деструктор. Используйте имя деструктора и любое 
  количество необходимых аргументов.
  
Ошибки
 
 
Советы и приемы
  
    - До освобождения памяти Delphi вызывает процедуру Finalize.
 
     - После окончания работы Dispose указатель Р содержит недопустимую величину. 
      Если указатель не является локальной переменной, обязательно обнулите его.
 
     -  Освобождайте память, выделенную процедурой GetMem, 
      с помощью процедуры FreeMem. Используйте 
      процедуру Dispose только для памяти, выделенной процедурой New.
  
  
 
Пример
type   PLink = ^TLink;   TLink = record      Info: string;      Next: PLink;      Previous: PLink;   end; const   FreePattern = Pointer($BAD00BAD); 
// Уничтожение связанного элемента двусвязного списка. procedure FreeLink(var Link: PLink); var   Tmp: PLink; begin   if Link.Previous <> nil then      Link.Previous.Next := Link.Next;   if Link.Next <> nil then      Link.Next.Previous := Link.Previous; 
  //	Ссылка на Link или Link.Next и т. п. после уничтожения Link   //	будет ошибкой. Облегчим поиск подобных ошибок, записав   //	в Link определенное фиктивное значение. Если программа вызывает   //	исключительную ситуацию, и ошибочный указатель равен этому   //	значению, проблема наверняка вызвана "висящей" ссылкой на   //	Link. 
  Link.Next := FreePattern; 
  Link.Previous := FreePattern;
  Tmp := Link;
  Link := FreePattern;
  Dispose(Tmp);
end;
 
Смотрите также
Процедуры Finalize, FreeMem, 
New.
 
 
 Нет комментариев. 
  
 
Оставить комментарий:
 |   
 |