Name
Dispose Procedure
Syntax
procedure Dispose(var P:Pointer-type); procedure Dispose(var P: ^object;Destructor);
Description
Memory that you allocate with New must be freed
with Dispose. Dispose quietly
ignores an attempt to free a nil pointer. If you
try to free a pointer that was already freed or was not allocated by
New, the results are unpredictable.
Dispose is not a real
procedure.
When disposing of an old-style object instance,
you can also pass a destructor call as the second argument. Use the
destructor name and any arguments it requires.
Tips and Tricks
Delphi calls
Finalizefor you before freeing the memory.After
Disposereturns, the pointerPcontains an invalid value. If the pointer is not a local variable, be sure to set it tonil.Call
FreeMemto free memory allocated byGetMem. CallDisposeto free memory allocated byNew.
Example
type PLink = ^TLink; TLink = record Info: string; Next: PLink; Previous: PLink; end; const FreePattern = Pointer($BAD00BAD); // Free a link in a doubly linked list. 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; // Referring to Link or Link.Next, etc., after freeing Link would // be an error. Help detect such errors by storing a particular // pointer patter in Link. If the program raises an access // violation, and the erroneous pointer is this pattern, the // problem is probably caused by a dangling reference ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access