3

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

SomeComponent := TSomeComponent.Create(nil);

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

非常感谢 :)

4

2 回答 2

15

这意味着您有责任自己释放它。

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

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

于 2011-03-24T13:59:24.770 回答
1

你应该阅读这篇文章。它讨论了如何设计 VCL 来处理这种所有权范式。

本文还举例说明了为什么释放由所有者创建的组件很重要。

于 2011-03-24T14:30:12.333 回答