Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Behandlung von Exceptions innerhalb von Konstruktoren

  Alt 17. Sep 2007, 17:22
Zu dem Code noch zwei Anmerkungen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyObject : TMyClass;
begin
  try
    MyObject := TMyClass.Create(True);
  except
    if Assigned(MyObject) then
      FreeAndNil(MyObject);
  end;
end;
1. Das If Assigned() kannst du dir sparen, das macht .Free intern selber (welches durch FreeAndNil() aufgerufen wird).
2. Ohne Initialisierung der Variable auf nil, knallt es so oder so, da das eine lokale Variable ist welche nicht initialisiert ist und somit ist die Möglichkeit eines recht ungültigen Wertes hoch. Dagegen kann auch Assigned() nichts ausrichten, da es nur auf <> nil prüft...

Und da du nicht freigeben brauchst, wie zuvor erklärt, kannst du dir somit gleich viel mehr sparen:

Somit so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyObject : TMyClass;
begin
  try
    MyObject := TMyClass.Create(True);
  except
    ShowMessage('Problem beim anlegen der Instanz');
  end;
end;
  Mit Zitat antworten Zitat