这里会发生什么?
当程序结束并超出范围时,对象是否仍然有效?它会保持未分配状态还是我仍可以参考?
每当用户决定向我的控件添加项目时,我都需要添加这些项目,并且还必须通过创建用户的活动来添加我的类的对象。我担心,当我需要处理这些对象以便在我的应用程序中进一步使用时,它们是否会保留在范围内或可访问?或者他们的参考文献会丢失?
procedure TForm1.Button1Click(Sender: TObject);
var
LMyCustomObj : TMyCustomObject;
begin
LMyCustomObj := TMyCustomObject.Create;
ListBox1.Items.AddObject('1', LMyCustomObj);
end;
此外,如果我添加
LMyCustomObj.Free;
到我的函数,它们也会从控件的集合中删除,还是会导致内存泄漏?
答案 0 :(得分:5)
当过程结束并超出范围
时,对象是否仍然有效
是
我担心,当我需要处理这些对象以便在我的应用程序中进一步使用时,它们是否会保留在范围内或可以访问?
仍然可以通过ListBox.Items.Objects[]
属性访问它们。
或他们的引用会丢失吗?
不,因为ListBox引用了它们。
如果我添加
LMyCustomObj.Free;
到我的功能,它们也将从控件的集合中删除
没有。完成使用后,您必须手动删除它们。
还是会导致内存泄漏?
没有。您更有可能在以后崩溃代码,因为ListBox现在包含对无效对象的引用。