为什么新的FreeAndNil不使用类型化的var参数?

问题描述 投票:0回答:1

这是悉尼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;
delphi memory-management
1个回答
0
投票

一位同事指出了我的实施问题。当您实际尝试将其与TObject后代一起使用时,会出现编译器错误

[[dcc32错误] Project3.dpr(20):E2033实际和形式变量的类型参数必须相同

我之前曾见过该错误,但这不是您经常遇到的错误。无论如何,这是我的借口。

© www.soinside.com 2019 - 2024. All rights reserved.