QList子-从QObject派生的结构或自定义类

QList children - struct or custom classes derived from QObject?

本文关键字:结构 自定义 派生 QObject QList      更新时间:2023-10-16

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

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

我已经准备好了解析,只是考虑在性能方面什么会更好:

  1. 创建c++结构体并传递它们(作为只包含简单数据的对象),包装在QList
  2. 创建自定义类派生自QObject和传递它们作为指针在QList,然后删除一切与qDeleteAll

这取决于你的类是携带行为还是只携带状态。

  1. 它们携带行为。

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

    至于qDeleteAll():我不会去那里。代替裸指针,使用智能指针,例如QSharedPointer。它们跟踪对其有效负载的引用数量,当refcount降为零时删除它。

    在这种情况下,不要使用QList,而是使用QVector等更高效的容器。

  2. 它们只携带状态。

    那么,一个"哑"的struct就足够了。在这种情况下,不要使用QList作为容器,而是使用更有效的容器,如QVector(不要忘记充分利用reserve()方法)。

一般来说,对于T类型(其中sizeof(T)>sizeof(void*)和非buildin/非qt类型),尽量避免使用QList<T>,因为QList的性能会降低。