这是悉尼10.4中的新FreeAndNil实现(已删除了现在多余的ARC代码)
procedure FreeAndNil(const [ref] Obj: TObject);
var
Temp: TObject;
begin
Temp := Obj;
TObject(Pointer(@Obj)^) := nil;
Temp.Free;
end;
我知道这在不支持10.3和更早版本的情况下现在是安全的,但是为什么不将新版本实现为
procedure PossiblyVeryBadButWhyExactly_FreeAndNil(var Obj : TObject);
var
Temp: TObject;
begin
Temp := Obj;
Obj := nil;
Temp.Free;
end;
一位同事指出了我的实施问题。当您实际尝试将其与TObject后代一起使用时,会出现编译器错误
[[dcc32错误] Project3.dpr(20):E2033实际和形式变量的类型参数必须相同
我之前曾见过该错误,但这不是您经常遇到的错误。无论如何,这是我的借口。