c++ - Qt:按值将自定义对象存储在集合中

标签 c++ qt qlist

假设我有这个类(class):

class Bear
{
public:
    Bear ();
    Bear (Bear &other);

    // ... methods

private:
    BearInfo* m_pInfo;
};

我可以存储 Bear QList<Bear> 中的对象按值(value)?根据文档:

Internally, QList<T> is represented as an array of pointers to items of type T. If T is itself a pointer type or a basic type that is no larger than a pointer, or if T is one of Qt's shared classes, then QList<T> stores the items directly in the pointer array.

虽然我的类只包含一个指针,但它既不是指针类型也不是基本类型,所以在我看来QList将存储指针( Bear* ),这不是我想要的。自 BearInfo结构必须是可变的,我无法导出 Bear来自 QSharedDataPointer .

有什么建议可以让这个类在 Qt 集合中按值存储吗?

最佳答案

使用 QVector ,Qt 文档说明了这一点:

QList、QLinkedList 和 QVarLengthArray 提供类似的功能。这是一个概述:

  • 对于大多数用途,QList 是合适的类。 prepend() 和 insert() 之类的操作通常比 QVector 更快,因为 QList 在内存中存储其项目的方式(有关详细信息,请参阅算法复杂性),并且其基于索引的 API 比 QLinkedList 的基于迭代器的 API 更方便。它还会扩展到您的可执行文件中的更少代码。
  • 如果您需要一个真正的链表,并保证在列表中间插入固定时间,并且迭代器指向项而不是索引,请使用 QLinkedList。
  • 如果您希望项目占据相邻的内存位置,或者如果您的项目大于指针并且您希望避免在插入时在堆上单独分配它们的开销,请使用 QVector。
  • 如果您想要一个低级的可变大小数组,QVarLengthArray 可能就足够了。

关于c++ - Qt:按值将自定义对象存储在集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6207684/

相关文章:

c++ - 在关闭应用程序期间正确关闭可能运行很长时间的线程

c++ - QT如何使用QTableView在QList中显示QMap

c++ - 对象拥有 QObject 派生类的集合的正确方法是什么?

c++ - 将 QList 转换为 QVariant

c++ - 对 vector 使用按位或等于(|=

c++ - std::deque.push_back(x) - 它到底做了什么?

c++ - 从导出的 dll 函数访问 dll 中的全局数据

c++ - 模板仅适用于内联定义

c++ - QGamePadManager connectedDevices 为空,但 Windows 检测到游戏 handle

qt - 如何更改 QGraphicsScene 上 QGraphicsItem 的 borderingRect() 的位置?