gpt4 book ai didi

delphi - 用释放对象替换TObjectList中的对象(Delphi7)

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

我有一个带有少量元素的TObjectList。我必须在同一项目中将其中之一替换为新的(不更改计数)。我执行以下操作:

procedure TForm1.Button1Click(Sender: TObject);
var
TObj: TObjectList;
LPoint: TPPoint;
i: integer;
begin
TObj:= TObjectList.Create;
try

for i:= 0 to 3 do
begin
LPoint:= TPPoint.Create(i, i+ 1);
TObj.Add(LPoint);
end;

LPoint:= TPPoint.Create(21, 22);
TObj.Items[1]:= nil;
TObj.Items[1]:= LPoint;

for i:= 0 to 3 do
begin
ShowMessage(IntToStr(TPPoint(TObj.Items[i]).X));
end;

finally
TObj.Free;
end;
end;


我的问题是:如何释放内存中被替换的元素?帮助说:“如果重新分配索引,则对象将被释放”。命令 TObj.Items[1]:= nil;是否足够?

在此先感谢您提供任何信息。

最佳答案

TObj.Items[1]:= nil;
TObj.Items[1]:= LPoint;


在这里,您执行两个作业,因此该类尝试释放两个项目。

TObj.Items[1]:= nil;


此时,上一项是在您先前的循环中添加的非null引用。该物体因此被破坏。

TObj.Items[1]:= LPoint;


当执行此行时, TObj.Items[1] = nil,因此在 Free上调用 nil方法。没发生什么事。

底线是您的代码过于复杂。您可以更换

TObj.Items[1]:= nil;
TObj.Items[1]:= LPoint;




TObj.Items[1]:= LPoint;


该类将销毁当前存储在 TObj.Items[1]中的对象,然后将其替换为 LPoint。随你便。

关于delphi - 用释放对象替换TObjectList中的对象(Delphi7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42293190/

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