Einzelnen Beitrag anzeigen

r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#4

Re: Behandlung von Exceptions innerhalb von Konstruktoren

  Alt 17. Sep 2007, 18:25
Um das mit den Konstruktoren nochmal klar zu stellen. IMHO ist es noch nicht ganz so klar beschieben:
- Create immer vor das try:
Delphi-Quellcode:
var
  test: TTest;
begin
  test := TTest.Create;
  try
    try
      test.DoSth(...);
    except
      ShowMessage('Die Welt geht gleich unter...');
    end;
  finally
    test.Free; // von mir aus auch FreeAndNil(), aber das ist hier nicht nötig, da die Variable beim Verlassen des Gültigkeitsbereiches ja eh im Nirwana verschwindet
  end;
end;
- Alternative: vorher nillen(insbesondere praktisch, wenn man mehrere Objekte hat):
Delphi-Quellcode:
var
  test: TTest;
begin
  test := nil;
  try
    try
      test := TTest.Create;
      test.DoSth(...);
    except
      ShowMessage('Die Welt geht gleich unter...');
    end;
  finally
    test.Free; // von mir aus auch FreeAndNil(), aber das ist hier nicht nötig, da die Variable beim Verlassen des Gültigkeitsbereiches ja eh im Nirwana verschwindet
  end;
- Wenn im Konstruktor eine Exception auftritt, kümmert sich Delphi darum, dass die schon reservierten ressourcen wieder freigegeben werden(siehe Muetzes Post)
- Will man auf eine im Konstruktor geworfene Exception reagieren, so nimmt man am besten die 2. oben genannte Variante.
- Alternativ kann man auch einen weiteren try...except Block ganz außen drum herum bauen, muss aber dann drauf achten, dass man dort auf das Objekt nicht mehr zugreifen kann...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat