Delphi动态数组分配给临时本地动态数组变量

时间:2017-05-27 09:02:49

标签: delphi c++builder-10.2-tokyo

我遇到新发布的delphi 10.2的问题,新的编译器显示错误

var 
  FGlobalVar: array of integer;

procedure SomeProc()
var
  ALocalVar: array of integer;
begin 
  ALocalVar := Pointer(FGlobalVar); {assign dynamic array}
  {Do Something}
end;

在以前的版本中,编译器delphi没有显示任何错误。

1 个答案:

答案 0 :(得分:4)

该代码永远不应该编译,东京会关闭循环漏洞。该演员表的问题在于可以绕过引用计数。您拥有它的代码不会遇到这个问题,但是如果转换被写在赋值的左侧,则不会进行引用。

Pointer(LocalVar) := GlobalVar;

这样编写,LocalVar被赋予对动态数组的引用,但引用计数不会递增。我很欣赏您的代码不是这样编写的,但我相信这就是开发人员选择进行更改的原因。

在任何情况下,如果使用兼容的类型,则无需进行强制转换。切换到TArray<Integer>并且不需要演员表。此外,您的代码将能够与泛型方法进行交互。