Home » Tutorials » Object Pascal/RTL » Exceptions

Exceptions

Ressourcenschutzblöcke

Im Gegensatz zu try-except, wo der except-Block nur beim Auftreten eines Fehlers ausgeführt wird, gibt es auch noch try-finally. Hier werden alle Anweisungen im finally-Block auf jeden Fall ausgeführt, auch wenn davor ein Fehler aufgetreten ist.
Das wird besonders verwendet, wenn man Systemressourcen belegt hat (Instanzen erzeugt usw.), die auch im Fehlerfall wieder freigegeben werden sollen.
Das Beispiel zeigt einen Fall, in dem ein Fenster nicht automatisch bei Programmstart erzeugt wird (es ist dazu aus der Liste der automatischen Fenstererzeugung in den Projekteinstellungen herauszunehmen), sondern erst, wenn es auch gebraucht wird. Tritt in dem Fenster ein Fehler auf, sollte der Speicher trotzdem wieder freigegeben werden:

Form2:=TForm2.Create(Application);
try
  Form2.ShowModal;
finally
  Form2.Free; //Fenster wird wieder freigegeben
end;

Es ist sinnvoll, das try direkt nach den Konstruktor-Aufruf (Create) zu setzen und das finally vor das Free. Der Finally-Abschnitt wird auf jeden Fall abgearbeitet – auch wenn im Try-Abschnitt davor per Exit die Routine verlassen wurde.