Delphi 动态数组分配给临时本地动态数组变量
Delphi Dynamic Array assign to temporary local dynamic array variable
我对新发布的 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不显示任何错误。
该代码不应该编译,东京关闭了漏洞。该转换的问题在于可以绕过引用计数。您拥有的代码不会遇到这个问题,但是如果强制转换写在赋值的左侧,则不会引用。
Pointer(LocalVar) := GlobalVar;
这样写,LocalVar
被分配了一个对动态数组的引用,但引用计数没有增加。我很欣赏您的代码不是这样写的,但我相信这就是开发人员选择进行更改的原因。
无论如何,如果您使用兼容的类型,则无需转换。切换到 TArray<Integer>
并且不需要强制转换。此外,您的代码将能够与泛型方法进行交互。
我对新发布的 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不显示任何错误。
该代码不应该编译,东京关闭了漏洞。该转换的问题在于可以绕过引用计数。您拥有的代码不会遇到这个问题,但是如果强制转换写在赋值的左侧,则不会引用。
Pointer(LocalVar) := GlobalVar;
这样写,LocalVar
被分配了一个对动态数组的引用,但引用计数没有增加。我很欣赏您的代码不是这样写的,但我相信这就是开发人员选择进行更改的原因。
无论如何,如果您使用兼容的类型,则无需转换。切换到 TArray<Integer>
并且不需要强制转换。此外,您的代码将能够与泛型方法进行交互。