【问题标题】:Using QVector and implement a subset of QVector in good practice使用 QVector 并在良好实践中实现 QVector 的子集
【发布时间】:2020-06-28 05:12:44
【问题描述】:

你好,早上好,一起, 我有两个关于 QVector 及其用法的问题。我有一个自己的自定义类。有必要使用QVector<QSharedPointer<Class*>> 还是像QVector<Class*>> 一样直接将实例添加到QVector 就足够了。我读到QVector 已经在内部使用了一个共享指针,与 std 向量相反。直接附加实例指针是不好的做法吗?

接下来,我想要一个带有选定元素的QVector 子集。使用 QVector> 来做这件事的好习惯是什么?

 __________
|QVector   |
|   _______|
|  |QVector|
|__|_______|

【问题讨论】:

  • 如果将指针放入向量中,则指向的对象不由 QVector(或任何其他 Qt 或 STL 容器)管理,您需要手动管理它们。所以如果你想要 shared_ptr 行为,你需要使用 QVector>。假设您根本需要指针,并且 Class 不能用于每个值。 (第二部分我不完全理解,但你可能想要一个 QVector>>)
  • 谢谢你,弗兰克。我编辑了我的帖子。您认为将指针直接附加到 QVector 是不好的做法吗?并手动管理实例?
  • 我认为如果你采取一些预防措施是可以的,比如将向量封装在一个类中,只有几个地方删除(并因此删除)项目,而不是传递向量的副本,其中那么这些物品的所有权可能就不清楚了。

标签: c++ qt vector qvector qsharedpointer


【解决方案1】:

使用QVector 直接添加实例可能不是直觉。 更好的解决方案是使用QList 容器。

它不直接存储对象,而是存储指向它们的指针。您可以获得在两端快速插入的所有好处,并且重新分配涉及改组指针而不是复制构造函数,但会失去实际 or 的空间局部性,并获得大量堆分配。

QList<QList<Class>> testlist,别忘了覆盖operator =

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多