Ecriture d'un bloc finally (Delphi)
Remonter à Gestion des exceptions - Index
Les blocs finally sont introduits par le mot clé finally. Ils font partie d'une instruction try..finally, qui présente la forme suivante :
try { instructions susceptibles de déclencher une exception} finally { instructions appelées même si le bloc try contient une exception } end;
Dans une instruction try..finally, l'application exécute toujours les instructions placées dans la partie finally, même quand des exceptions se produisent dans le bloc try. Si du code du bloc try (ou une routine appelée par du code du bloc try) déclenche une exception, l'exécution s'interrompt là. Quand un gestionnaire d'exception est trouvé, l'exécution se poursuit dans la partie finally, qui est appelée le "code de nettoyage". Une fois la partie finally exécutée, le gestionnaire d'exception est appelé. Quand il n'y a pas d'exception, le code de nettoyage est exécuté dans l'ordre normal après toutes les instructions du bloc try.
Le gestionnaire d'événement défini par le code suivant utilise un bloc finally de telle sorte que, lorsqu'il alloue de la mémoire et génère une erreur, il libère quand même la mémoire allouée :
procedure TForm1.Button1Click(Sender: TObject); var APointer: Pointer; AnInteger, ADividend: Integer; begin ADividend := 0; GetMem(APointer, 1024);{ allouer 1Ko de mémoire } try AnInteger := 10 div ADividend;{ cela génère une exception } finally FreeMem(APointer, 1024);{ malgré l'exception, l'exécution reprend ici } end; end;
Les instructions placées dans le bloc finally ne dépendent pas de l'apparition d'une exception. Si les instructions de la partie try ne déclenchent pas d'exception, l'exécution se poursuit quand même par le bloc finally.