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
Finalize
for you before freeing the memory.After
Dispose
returns, the pointerP
contains an invalid value. If the pointer is not a local variable, be sure to set it tonil
.Call
FreeMem
to free memory allocated byGetMem
. CallDispose
to 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 ...
Get Delphi in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.