Delphi Dynamic Array присваивает временную переменную локального динамического массива
У меня есть проблема с новой выпущенной 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 ответ
Этот код никогда не должен был компилироваться, и Токио закрывает дыру в петле. Проблема с этим приведением в том, что подсчет ссылок может быть обойден. Код, который у вас есть, не страдает от этой проблемы, но если приведение приведено в левой части назначения, ссылка не берется.
Pointer(LocalVar) := GlobalVar;
Написано так, LocalVar
назначается ссылка на динамический массив, но счетчик ссылок не увеличивается. Я ценю, что ваш код написан не так, но я считаю, что именно по этой причине разработчики решили внести изменения.
В любом случае, нет необходимости в приведении, если вы используете типы, которые совместимы. Переключиться на TArray<Integer>
и бросок не нужен. Кроме того, ваш код сможет взаимодействовать с универсальными методами.