more safe FreeAndNil
Original Reporter info from Mantis: barlone @barloneD
-
Reporter name:
Original Reporter info from Mantis: barlone @barloneD
- Reporter name:
Description:
I suggest fix procedure FreeAndNil (rtl/objpas/sysutils.inc)
FROM:
procedure FreeAndNil(var obj);
var
temp: tobject;
begin
temp:=tobject(obj);
pointer(obj):=nil;
temp.free;
end;
TO more safely:
procedure FreeAndNil(var obj);
var
temp: tobject;
begin
temp:=tobject(obj);
pointer(obj):=nil;
if Assigned(temp) then temp.free;
end;
In some code of LCL (PostScriptCanvas.pas), etc. meets code like:
...
if Assigned(obj) then FreeAndNil(obj);
...
This can write more shortly.
Example 2: in rtl/objpas/classes/writer.inc on line 718:
try
Component.GetChildren(@WriteComponent, FRoot);
Finally
If Assigned(Fancestors) then
For I:=0 to FAncestors.Count-1 do
FAncestors.Objects[i].Free;
FreeAndNil(FAncestors);
end;
if Fancestors = nil, line "FreeAndNil(FAncestors);" generate exception.
Mantis conversion info:
- Mantis ID: 19238
- Platform: any
- Version: 2.5.1