Finalization Keyword
unitName
; interfaceDeclarations
... implementationDeclarations
... initializationStatements
... finalizationStatements
... end.
The finalization
section of a unit contains statements that run when the program exits
or when Windows unloads a library. Finalization sections run in the
opposite order of initialization.
Note that a unit must have an initialization
section in order to have a finalization
section.
The initialization section can be empty.
Use a finalization
section to clean up global
memory allocation and other global settings, such as changes to
global variables.
Always free all memory and other resources used by the unit. The unit might be loaded into a package, and the package can be loaded and unloaded many times in a single application. Small memory or resource leaks can quickly grow to big problems if you aren’t careful.
procedure ErrorHandler(ErrorCode: Integer; ErrorAddr: Pointer); begin ... // Handle runtime errors. end; // Set a new error handler, but save the old one. Restore the previous // error handler when this unit finalizes (which might be when // the application unloads the package that contains this unit, // and the application will continue to run using the old // error handler). var OldErrorProc: Pointer; initialization OldErrorProc := ErrorProc; ErrorProc := @ErrorHandler; finalization ErrorProc := OldErrorProc; end.