delphi:与控件的items集合中的字符串相关联的对象会发生什么

时间:2012-10-04 18:23:02

标签: delphi

这里会发生什么?

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

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

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

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

此外,如果我添加

     LMyCustomObj.Free; 

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

1 个答案:

答案 0 :(得分:5)

  

当过程结束并超出范围

时,对象是否仍然有效

  

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

仍然可以通过ListBox.Items.Objects[]属性访问它们。

  

或他们的引用会丢失吗?

不,因为ListBox引用了它们。

  

如果我添加

LMyCustomObj.Free;  
     

到我的功能,它们也将从控件的集合中删除

没有。完成使用后,您必须手动删除它们。

  

还是会导致内存泄漏?

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