说我有一个名为的成员变量 结果m_result
class Result{
QList<Group *> m_groups
}
和群组
class Group{
QList<Data> m_data
}
随着程序的继续,每个组的数据QList都在不断增长。所有组都在堆中分配(因此指针)。实质上,每个组都在堆中分配ONCE。每次QList增长时,是否会重新分配特定组?另外,由于数据成员的增长,m_testResult是否会一遍又一遍地重新复制?
答案 0 :(得分:7)
在QList内部,会有指向实际保存数据的其他一些对象或数组的指针。随着列表的增长,将分配此后备数据的新对象,并删除现有的对象。您展示的代码不必担心它,但如果您实现自己的集合,那么您可以。一旦分配了对象本身就不会增长。
可以找到QList的详细信息here - 它使用指向<T>
的指针数组,因此不是链接列表。因为它使用指向元素的指针,所以在调整数组大小时不必复制元素,只需复制指针(或者如果它以类似于VList的方式实现,可能不会 - 我没有看到任何东西在文档中指示它使用的策略),因此每当其QList增长时,特定的组将不会重新分配。
答案 1 :(得分:2)
我特别不了解QList
,但总的来说,我希望如下:
添加新元素后,QList
会分配(new
)更多内存,并将最后一个元素链接到新元素。
删除(现有)元素后,元素的前任链接到其后继元素,持有元素的内存为delete
- ed。
这是关于任何链接列表如何工作的一般原则,例如std::list
或std::slist
对象永远不会增长,但可以反复声明和释放内存。