组件构造函数中nil owner的含义是什么

时间:2011-03-24 13:54:30

标签: delphi constructor null owner

我正在查看this question,我现在想知道,nil作为组件构造函数中的所有者是什么意思。

SomeComponent := TSomeComponent.Create(nil);

我知道,在使用这个构造函数时我应该自己释放它,但这是在创建时传递所有者的唯一原因吗?当我忘记释放它并关闭我的应用程序时会发生什么 - 这是否意味着这个对象作为垃圾留在内存中?

非常感谢:)

2 个答案:

答案 0 :(得分:15)

这意味着你自己负责释放它。

如果您在表单上放置一个组件,它将使用该表单作为所有者构建。这意味着当表单被释放时,它将释放它拥有的所有组件。如果您传递不同的所有者(例如,在运行时创建TButton并使TPanel成为其所有者),则同样适用;当所有者被销毁时,它会释放它在此过程中拥有的所有组件。

使用nil作为所有者意味着您在代码中手动创建它,并且您将自己承担释放它的责任。如果您忘记并且应用程序关闭,它的内存将被释放回操作系统。但是,如果您的应用程序在您忘记之后运行了很长时间,那么您将拥有一块不应该使用的内存。

答案 1 :(得分:1)

您应该阅读this article。它讨论了VCL如何设计来处理这种所有权范例。

本文还举例说明为什么使用所有者创建的免费组件也很重要。