Anzeigen: Delphi C++
Anzeigeeinstellungen

Einen finally-Block erstellen (Delphi)

Aus RAD Studio XE2
Wechseln zu: Navigation, Suche

Nach oben zu Exceptions - Index

Finally-Blöcke werden durch das Schlüsselwort finally eingeleitet. Sie sind Teil einer try...finally-Anweisung, die folgende Form hat:



 try
 { Anweisungen, die eine Exception auslösen }
 finally
 { Anweisungen, die auch dann ausgeführt werden, wenn im try-Block eine Exception auftritt
 end;



Die Anwendung führt bei einer try...finally-Anweisung stets die im finally-Abschnitt enthaltenen Anweisungen aus, auch wenn im try-Block eine Exception ausgelöst wird. Löst eine Anweisung oder Routine im try-Block (oder eine Routine, die von dem im try-Block enthaltenen Code aufgerufen wird) eine Exception aus, wird die Ausführung an diesem Punkt unterbrochen. Sobald eine Exception-Behandlungsroutine gefunden wird, setzt die Anwendung die Ausführung im finally-Abschnitt fort. Dieser Abschnitt wird auch als Bereinigungs--Code bezeichnet. Nachdem der finally-Abschnitt verarbeitet wurde, wird die Exception- Behandlungsroutine aufgerufen. Tritt keine Exception auf, wird der Bereinigungs--Code in der angegebenen Reihenfolge ausgeführt, also nach den Anweisungen im try-Block.

Das folgende Codefragment zeigt eine Ereignisbehandlungsroutine, die mithilfe eines finally-Blocks sicherstellt, dass der zugewiesene Speicher auch dann freigegeben wird, wenn ein Fehler generiert wird:



 procedure TForm1.Button1Click(Sender: TObject);
 var
 APointer: Pointer;
 AnInteger, ADividend: Integer;
 begin
   ADividend := 0;
   GetMem(APointer, 1024); { 1 KB Speicher wird zugewiesen }
   try
     AnInteger := 10 div ADividend; { Löst eine Exception aus }
   finally
     FreeMem(APointer, 1024); { Ausführung wird trotz Fehler an dieser Stelle fortgesetzt }
   end;
 end;



Die Anweisungen im finally-Block sind nicht vom Auftreten einer Exception abhängig. Auch wenn keine der Anweisungen im try-Abschnitt eine Exception auslöst, wird der finally-Block ausgeführt.

Siehe auch

Frühere Versionen
In anderen Sprachen