Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Try Except End; verschachteln

  Alt 7. Nov 2010, 22:16
die Try-Except-Verschachtelungen wurden ja nurn schon geklärt, aber nun noch was zur Verschachtelung von Try-Finally, bzw. des Resourcen-Schutzblocks:
Zitat:
Delphi-Quellcode:
tPNG := TPngObject.Create;
tJPG := TJPEGImage.Create; // 1
tBMP := TBitmap.Create;
Try
  ...
Finally
  tPNG.Free;
  tJPG.Free;
  tBMP.Free;
End;
1: Hier eine Exception (z.B. OutOfMemory und Co.) und schon wird tPNG nicht freigegeben.

Also eigentlich sollte es so aussehn, damit alles korrekt freigegeben würde:
Delphi-Quellcode:
tPNG := TPngObject.Create;
Try
  tJPG := TJPEGImage.Create;
  Try
    tBMP := TBitmap.Create;
    Try
      ...
    Finally
      tBMP.Free;
    End;
  Finally
    tJPG.Free;
  End;
Finally
  tPNG.Free;
End;
Eventuell geht auch Folgendes.
Dieses geht aber nur, wenn man davon ausgehn kann, daß es beim Freigeben (hier in .Free) keine Probleme auftreten können.
(OK, Fehler, welche sowieso den nachfolgenden Programmfluß irreversibel schädigen, kann man gern ignorieren, da dann sowieso alles Egal ist )
Delphi-Quellcode:
tPNG := nil;
tJPG := nil;
tBMP := nil;
Try
  tPNG := TPngObject.Create;
  tJPG := TJPEGImage.Create;
  tBMP := TBitmap.Create;
  ...
Finally
  tPNG.Free;
  tJPG.Free;
  tBMP.Free;
End;
bzw. "verkürzt":
Delphi-Quellcode:
tJPG := nil;
tBMP := nil;
tPNG := TPngObject.Create;
Try
  tJPG := TJPEGImage.Create;
  tBMP := TBitmap.Create;
  ...
Finally
  tPNG.Free;
  tJPG.Free;
  tBMP.Free;
End;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat