gpt4 book ai didi

delphi - 带有匿名过程的内联 var 错误?

转载 作者:行者123 更新时间:2023-12-04 15:25:18 35 4
gpt4 key购买 nike

使用以下代码:

Procedure TMyForm.doAction;
begin

generateToken;
VAR LToken := generatedToken; // Ltoken is set correctly to xxxxx

//-----
TThread.CreateAnonymousThread(
procedure
begin

GetData(LToken); // << here LToken is empty !!

end).Start;

end;

如您所见,LToken 的值在匿名过程中为空(因此捕获无效)。如果我不对 LToken 使用内联变量,那么它就可以工作

Procedure TMyForm.doAction;
Var LToken: ansiString;
begin
....
end;

这是错误还是已知限制?

最佳答案

Delphi 10.3.x 中存在编译器错误,匿名方法无法正确捕获内联变量。

内联变量不适用于匿名方法 https://quality.embarcadero.com/browse/RSP-26666

正如您已经提到的,10.3.x 的解决方案是定义和使用局部变量,而不是使用内联变量。

另一种解决方案是升级到 10.4,其中使用匿名方法捕获内联变量已得到纠正,现在它可以正确捕获内联变量,因此您将能够使用您的原始代码。

但是,10.4 中的编译器中存在与捕获内联变量相关的其他错误。如果变量是托管类型(接口(interface)引用、字符串...),它永远不会自动释放并且会泄漏内存。

此类变量必须在捕获它们的匿名方法结束时显式释放。例如,将 nil 分配给接口(interface)引用或将空字符串分配给字符串变量...

内存泄漏:匿名方法捕获的内联接口(interface)未释放 https://quality.embarcadero.com/browse/RSP-29564

关于delphi - 带有匿名过程的内联 var 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62372257/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com