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.
Нет комментариев.
Оставить комментарий:
|
|