c++ - 为动态创建的 TComponent 派生类实例传递 NULL Owner 参数是否可行?

标签 c++ c++builder tcomponent

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

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

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

最佳答案

这当然不是错误的做法。

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

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


编辑 cudo's to Remy

虽然安装时随附的组件在没有所有者的情况下也可以正常使用(除了一些特殊情况,例如 TXMLDocument,在指定所有者时表现不同) 总是有可能第三方依赖分配所有者的自酿啤酒组件。

关于c++ - 为动态创建的 TComponent 派生类实例传递 NULL Owner 参数是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15967075/

相关文章:

c++ - C++ 中指向 void 的指针?

c++ - static_assert 成员变量在 C++17 中被标记为 'static'?

c++ - 删除子集交易表格文件

delphi - 我可以使用 .Create(Nil) 而不是 .Create(Application)

delphi - 我可以使用默认的 WriteComponent 操作将 Delphi TPersistent 序列化为 TComponent 的字段吗?

Delphi:将 TComponent 保存到 Clientdataset blob 字段

c++ - Pthread_create 导致段错误(C++,Kubutnu 15)

debugging - 如何将 C++Builder 应用拆分为 DLL

c++ - C++ 中的 Teechart 甘特图日期

c++ - Borland C++ Builder 中的 scanf