读完有趣的亲子系统后QObject
我想知道 Qt 开发人员使用它来代替更传统的容器有多常见。假设内存连续性不是必需的,这似乎提供了一些有趣的功能。
例如,您可以有一个QObject
并为其提供不同类型的子级,然后根据其类型轻松找到所有子级,从而为 QObject 提供动态异构容器式功能,而不是传统容器所需的同质集合。
And QObject
自然地管理其孩子的记忆,这也很方便。
这是此功能的常见用途吗?
QObject::findChildren
可能比将对象存储在 QList 等普通容器中慢得多,因为:
- 它每次都会迭代所有子项。它甚至递归搜索(但这可以禁用)。
- 它执行运行时类型检查。
- 它每次都会构造新的 QList。如果结果中有很多对象,这可能会很慢且昂贵。
如果您只是使用以上所有内容,则不需要QList<Type*> my_objects
。同样在这种情况下:
- 您可以为您的收藏命名。
QList<QPushButton*> panic_buttons
比findChildren<QPushButton*>()
.
- 您可以拥有多个相同类型的对象集合。
如果你想制作异构容器,可以使用QHash<any_type_identifier, QObject*>
。会更快。
也许,findChildren 方法有时可能更简单。但如果你有很多对象或复杂的类,你最好使用普通容器。您仍然可以毫无问题地使用 QObject 的内存管理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)