5

我经常使用 C++ RAD Studio 和 Builder 6,并且经常在编写非可视代码时动态创建表单或动态创建非可视组件。在设计表单时,放置在该表单上的组件的 Owner 属性会自动设置,所以我从不担心。但是,当创建从TComponent动态派生的任何内容时,我总是将NULL其作为Owner参数传递,因为我总是负责稍后释放内存。

Borland/Embarcadero 文档并没有真正涵盖在动态创建事物的情况下所需的内容(或者我可能没有在正确的地方寻找),并且似乎只涵盖了基于设计时表单的场景。

我想知道是否为动态创建的组件传递一个 NULL 所有者是正确的做法,或者它是否会导致稍后会出现的内部问题。代码可以编译并且工作正常,但我想知道它是否会导致或可能导致任何幕后问题。

4

1 回答 1

5

这当然不是一件错误的事情。

正如您已经暗示的那样,传递所有者可以使您不必自己管理对象的生命周期。没有隐藏的内部副作用需要您通过所有者。

FWIW:创建/使用和销毁无主组件并不少见,我们一直在这样做。


将 cudo编辑为 Remy

虽然您的安装附带的组件可以在没有所有者的情况下使用(除了一些极端情况,如 TXMLDocument 与分配的所有者的行为不同),但总是有可能依赖于分配的所有者的第三方或自制组件.

于 2013-04-12T09:04:15.533 回答