Delphi-PRAXiS
Seite 3 von 3     123

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Try-Finally und Try-Except zusammen nutzen? (https://www.delphipraxis.net/154794-try-finally-und-try-except-zusammen-nutzen.html)

himitsu 29. Sep 2020 21:40

AW: Try-Finally und Try-Except zusammen nutzen?
 
Welche Reihenfolge, das kommt drauf an, ob
erst Freigeben und dann Fehlerbehandlung, welche auch das Freigeben mit behandlet,
oder erst die Fehlerbehandlung und dann die Freigabe.

Eventuelle Speicherprobleme zuerst freigeben und dann behandlen,
aber muß man beim Behandelt auf das zugreifen, was knallte, dann Freigeben zuletzt.

Auch Sperren (CriticalSections und Datei- oder Datenbankzugriffe) meist zuerst beenden und dann z.B. den Fehlerdialog anzeigen,
weil andersrum kann es sonst schnell einen Deadlock geben.

Zitat:

Delphi-Quellcode:
try
  obj := TObject.Create;
  try
    // Some code
  except
    // Exception handling
  end;
finally
  obj.Free;
end;

Nein!

Lies dir die Compiler-Warnung durch und du weißt warum.

Delphi-Quellcode:
obj := TObject.Create;
try
  try
    // Some code
  except
    // Exception handling
  end;
finally
  obj.Free;
end;

Aviator 30. Sep 2020 08:14

AW: Try-Finally und Try-Except zusammen nutzen?
 
Zitat:

Zitat von himitsu (Beitrag 1474545)
Zitat:

Delphi-Quellcode:
try
  obj := TObject.Create;
  try
    // Some code
  except
    // Exception handling
  end;
finally
  obj.Free;
end;

Nein!

Lies dir die Compiler-Warnung durch und du weißt warum.

Das war leider nur ein Fehler bei der Eingabe, da ich das schnell hier im Editor gemacht habe. Dass das Create oben drüber gehört ist mir klar. Dafür brauche ich auch keine Compiler Warnung.

Frickler 30. Sep 2020 13:36

AW: Try-Finally und Try-Except zusammen nutzen?
 
Zitat:

Zitat von himitsu (Beitrag 1474545)
Delphi-Quellcode:
obj := TObject.Create;
try
  try
    // Some code
  except
    // Exception handling
  end;
finally
  obj.Free;
end;

Alternativ:

Delphi-Quellcode:
obj := nil;
try
  obj := TObject.Create;
  try
    // Some code
  except
    // Exception handling
  end;
finally
  obj.Free;
end;
Die Alternativversion ist vor allem sinnvoll, wenns mehrere Objekte sind und man nicht ein try..finally pro Objekt habe will:

Delphi-Quellcode:
obj1 := nil;
obj2 := nil;
obj3 := nil;
try
  obj1 := TObject.Create;
  obj2 := TObject.Create;
  obj3 := TObject.Create;
  try
    // Some code
  except
    // Exception handling
  end;
finally
  obj1.Free;
  obj2.Free;
  obj3.Free;
end;
statt

Delphi-Quellcode:
obj1 := TObject.Create;
try
  obj2 := TObject.Create;
  try
    obj3 := TObject.Create;
    try
      try
        // Some code
      except
        // Exception handling
      end;
    finally
      obj3.Free;
    end;
  finally
    obj2.Free;
  end;
finally
  obj1.Free;
end;

himitsu 30. Sep 2020 14:43

AW: Try-Finally und Try-Except zusammen nutzen?
 
Zitat:

Delphi-Quellcode:
finally
  obj1.Free;
  obj2.Free;
  obj3.Free;
end;

Sowas aber auch nur, wenn man im Normallfall sicherstellen kann, dass es beim Freigeben nicht knallt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr.
Seite 3 von 3     123

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz