假设我有这个类(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 typeT
. IfT
is itself a pointer type or a basic type that is no larger than a pointer, or ifT
is one of Qt's shared classes, thenQList<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/