[
OT] Kurzes Thread-Hijacking, da es hier aufkam:
Wenn es freigegeben und auf nil gesetzt oder mit nil initialisiert und nie instanziert wurde, richtig.
Nochmal nachgehakt. Wenn ich es nie instanziere und auch vorher nicht mit nil initialisiere, dann würde es kanllen?
Delphi-Quellcode:
var t:TStringlist;
begin
try
Irgendwas, das eine
Exception auslöst;
t:=TStringlist.Create;
Irgendwas anderees mit t;
finally
t.Free;
end;
end;
Hier t nie erzeugt, da es schon vorher knallt, wird aber im finally freigegeben?
Delphi-Quellcode:
var t:TStringlist;
begin
t:=TStringlist.Create;
try
Irgendwas, das eine
Exception auslöst;
Irgendwas anderees mit t;
finally
t.Free;
end;
end;
Hier ist t vor der
exception erzeugt worden und kann freigegeben werden?
[/
OT]
Genau so ... denn
lokale Variablen werden nicht automatisch initialisiert wie globale oder Klassen-Variablen
Allerdings, wenn man sich das so ansieht, scheinst du hier doch eine globale Variable definiert zu haben
Delphi-Quellcode:
var
globalSL : TStrings;
procedure Foo;
var
localSL : TStrings;
begin
// lokale Variablen sollten initialisiert werden
// localSL := nil;
try
...
// mögliche Exception
...
globalSL := TStringList.Create;
localSL := TStringList.Create;
...
finally
globalSL.Free;
localSL.Free;
// mögliche Exception!!!
end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)