gpt4 book ai didi

c++ - QList children - 从 QObject 派生的结构或自定义类?

转载 作者:太空狗 更新时间:2023-10-29 21:50:36 31 4
gpt4 key购买 nike

我目前正在 Symbian 平台上开发 Qt 应用程序。应用程序有一个 sqlite 数据库,初始数据是从 txt 文件填充的。

我正在根据 json 格式的数据实现在线更新。所以我想在我的数据库更新类中创建通用函数,该函数采用类/结构的 QList 并从中更新数据库。 QList 将填充来自 txt 或 json 的对象。

我已经进行了解析,只是考虑在性能方面会更好:

  1. 创建 C++ 结构并传递它们(因为对象只包含简单数据)包装在 QList
  2. 创建从 QObject 派生的自定义类并将它们作为指针传递到 QList 中,然后使用 qDeleteAll 删除所有内容
  3. 任何其他方式...

最佳答案

这取决于您的类是承载行为还是仅承载状态。

  1. 他们携带行为。

    那么,一个多态类是有序的,是的。是否需要继承QObject是另一个问题。继承自 QObject 您需要它的服务(内省(introspection)、信号/槽、事件处理)。否则,不要。

    至于qDeleteAll() : 我不会去那里。使用智能指针代替裸指针,例如 QSharedPointer .他们跟踪对其有效载荷的引用次数,并在引用计数降为零时将其删除。

    在这种情况下,不要使用 QList ,而是一个更高效的容器,例如 QVector .

  2. 它们只携带状态。

    然后,一个“哑巴”struct可能就足够了。在这种情况下,不要使用 QList作为一个容器,但更有效的东西,比如 QVector (不要忘记善用 reserve() 方法)。

一般来说,尽量避免QList<T>对于类型 T其中 sizeof(T)>sizeof(void*)和非内置/非 Qt 类型,因为 QList performance is degraded for these .

关于c++ - QList children - 从 QObject 派生的结构或自定义类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5844036/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com