Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: "FinalllyExit" gewünscht

  Alt 20. Mai 2011, 01:00
Finally unterdrückt keine Exceptions,
denn am Ende des Finally-Blocks wir die Exception automatisch wieder ausgelöst.
(es sei denn es tritt in Finally eine Anderere/Neue Exception auf, dann wird diese weitergereicht)



Zitat:
Delphi-Quellcode:
procedure xyz;
begin
  A := TA.Create;
  B := TB.Create;
  try
    ...
  finally
    A.Free;
    B.Free;
  end;
end;
Ist unsicher, wie richtig gesagt wurde, denn A wird nicht freigegeben, wenn es in TB.Create knallt.

Delphi-Quellcode:
procedure xyz;
begin
  A := TA.Create;
  B := TB.Create;
  ...
  FinallyExit:
  A.Free;
  B.Free;
end;
Ist nicht viel besser, denn A und B wurden nicht initialisiert und wenn es in einem der Konstruktoren knallt. dann nallt es auch bei den uninitialisierten Free's.
Außerdem übersieht man das FinallyExit schnell mal ... so erkennt man nicht, daß es da einen Schutzblock gibt und man sieht nicht wo der Block aufhört.

Delphi-Quellcode:
procedure xyz;
begin
  A := TA.Create;
  try
    B := TB.Create;
    try
      ...
    finally
      B.Free;
    end;
  finally
    A.Free;
  end;
end;

// oder
procedure xyz;
begin
  A := nil;
  B := nil;
  try
    A := TA.Create;
    B := TB.Create;
    ...
  finally
    A.Free;
    B.Free;
  end;
end;

// oder

procedure xyz;
begin
  B := nil;
  A := TA.Create;
  try
    B := TB.reate;
    ...
  finally
    A.Free;
    B.Free;
  end;
end;
so sieht es schon besser aus
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (20. Mai 2011 um 01:05 Uhr)
  Mit Zitat antworten Zitat