2017-05-27 61 views
1

我有一个新的发布德尔福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编译器不显示任何错误。

回答

4

该代码不应该编译,东京关闭循环孔。该演员的问题是参考计数可以被绕过。您所拥有的代码不会遇到这个问题,但是如果将演员编写在作业的左侧,则不会引用任何参考。

Pointer(LocalVar) := GlobalVar; 

写这样圆形,LocalVar被分配一个参考动态数组,但引用计数不递增。我很欣赏你的代码不是这样写的,但我相信这就是开发人员选择进行更改的原因。

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