RAD Studio |  |

Writing a Finally Block (Delphi)
See Also
Collapse All

Finally blocks are introduced by the keyword finally. They are part of a try..finally statement, which has the following form:

Copy Code

    try
    { statements that may raise an exception}
    finally
    { statements that are called even if there is an exception in the try block}
    end;

In a try..finally statement, the application always executes any statements in the finally part, even if an exception occurs in the try block. When any code in the try block (or any routine called by code in the try block) raises an exception, execution halts at that point. Once an exception handler is found, execution jumps to the finally part, which is called the cleanup code. After the finally part executes, the exception handler is called. If no exception occurs, the cleanup code is executed in the normal order, after all the statements in the try block.

The following code illustrates an event handler that uses a finally block so that when it allocates memory and generates an error, it still frees the allocated memory:

Copy Code

    procedure TForm1.Button1Click(Sender: TObject);
    var
    APointer: Pointer;
    AnInteger, ADividend: Integer;
    begin
      ADividend := 0;
      GetMem(APointer, 1024);{ allocate 1K of memory }
      try
        AnInteger := 10 div ADividend;{ this generates an exception }
      finally
        FreeMem(APointer, 1024);{ execution resumes here, despite the exception }
      end;
    end;

The statements in the finally block do not depend on an exception occurring. If no statement in the try part raises an exception, execution continues through the finally block.

See Also

Raising an Exception

Exception-handling Statements

Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
What do you think about this topic? Send feedback!