gpt4 book ai didi

delphi - 自由 TStringList 对象中的错误

转载 作者:行者123 更新时间:2023-12-03 18:01:38 26 4
gpt4 key购买 nike

procedure FreeListObjects( l : TStrings);
var i : integer;
BEGIN
FOR i := 0 TO l.Count -1 DO BEGIN
l.Objects[i].Free;
l.Objects[i] := NIL;
END;
end;



PROCEDURE StringListAdd;
VAR i : INTEGER; Code : LONGWORD;
BEGIN
l := Classes.TstringLIST.CREATE;
FOR i := 0 TO 4 DO BEGIN
Code := i ;
l.AddObject('', TObject(code));
END;
Code := LONGWORD(l.Objects[2]);
FreeListObjects(l);
l.Free;
END;

当我使用 l.OwnsObjects := TRUE 而没有 FreeListObjects(l) 时,会发生错误。

谁来释放这个字符串列表的对象?

最佳答案

您已经告诉字符串列表它拥有其 Objects 数组中的对象。在这种情况下,它会在您销毁列表时自动调用所有这些值的 Free,就像您的 FreeListObjects 代码一样。

但是那里没有对象!您已经获取了不是对象的 Integer 值,并对它们进行类型转换以将它们强制转换为 TObject。您不能在 Integer 上调用 Free,但在任何代码调用 Free 时,它都不知道原始类型值(value)。进行类型转换时,您告诉编译器您知道自己在做什么,并且编译器相信您。如果您真的不知道自己在做什么,请不要进行类型转换。

你说没有 FreeListObjects 就会出错,但是你 FreeListObjects 会出错。问题是您在不是对象的对象上调用 Free。无论您是在自己的代码中调用它还是让库调用它都不重要。

您可能已经花一些时间使用 C#。在那种语言中,整数会自动“装箱”成真实的对象。这不是 Win32 Delphi 的工作方式。 Delphi 不进行装箱和拆箱。

关于delphi - 自由 TStringList 对象中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1394114/

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