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