【问题标题】:Delphi Dynamic Array assign to temporary local dynamic array variableDelphi 动态数组分配给临时局部动态数组变量
【发布时间】:2017-05-27 09:02:49
【问题描述】:

我对新发布的 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不显示任何错误。

【问题讨论】:

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


    【解决方案1】:

    那段代码本不应该编译,Tokyo 堵住了这个漏洞。该转换的问题在于可以绕过引用计数。您拥有的代码不会遇到这个问题,但如果演员表写在赋值的左侧,则不会采用任何引用。

    Pointer(LocalVar) := GlobalVar;
    

    这样写,LocalVar 被分配了一个对动态数组的引用,但引用计数没有增加。我很欣赏您的代码不是这样编写的,但我相信这就是开发人员选择进行更改的原因。

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

    【讨论】:

      猜你喜欢
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      相关资源
      最近更新 更多