gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:52:06 27 4
gpt4 key购买 nike

假设我有这个类(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/

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