0

这里会发生什么?

当过程结束并超出范围时,对象是否仍然有效?它会保持未分配状态还是我仍然可以参考?

每当用户决定将项目添加到我的控件时,我都需要添加此类项目,并且我还必须通过在用户的活动上创建然后添加我的类的对象。我担心,当我需要处理这些对象以在我的应用程序中进一步使用时,它们会保留在范围内还是可以访问?或者他们的参考资料会丢失?

     procedure TForm1.Button1Click(Sender: TObject);
     var
       LMyCustomObj : TMyCustomObject;
     begin
       LMyCustomObj := TMyCustomObject.Create;

       ListBox1.Items.AddObject('1', LMyCustomObj);
     end;

进一步,如果我添加

     LMyCustomObj.Free; 

对于我的函数,它们是否也会从控件的集合中删除,还是会导致内存泄漏?

4

1 回答 1

5

当过程结束并超出范围时,对象是否仍然有效

是的。

我担心,当我需要处理这些对象以在我的应用程序中进一步使用时,它们会保留在范围内还是可以访问?

他们仍然可以通过ListBox.Items.Objects[]酒店访问。

或者他们的参考资料会丢失?

不,因为 ListBox 有对它们的引用。

如果我添加进一步

LMyCustomObj.Free;  

对于我的功能,它们是否也会从控件的集合中删除

不可以。您必须在使用完毕后手动删除它们。

还是会导致内存泄漏?

不,您更有可能在以后崩溃您的代码,因为 ListBox 现在包含对无效对象的引用。

于 2012-10-04T20:55:49.053 回答