假设我有一个成员变量叫做 结果m_result
class Result{
QList<Group *> m_groups
}
和组
class Group{
QList<Data> m_data
}
随着程序的继续,每个组的数据 QList 不断增长。所有组都分配在堆中(因此是指针)。本质上,每个组在堆中分配一次。每次 QList 增长时,特定组是否会重新分配?还有,m_testResult会不会因为Data member的增长而一遍又一遍的复制?
最佳答案
在QList内部,会有一些指针指向其他一些实际保存数据的对象或数组。随着列表的增长,将分配此支持数据的新对象并删除现有对象。您展示的代码不必担心,但如果您要实现自己的集合,那么您会。一旦分配,对象本身就不会增长。
QList 的详细信息可以找到here - 它使用指向 <T>
的指针数组,所以不是链表。由于它使用指向元素的指针,因此在调整数组大小时不必复制元素,只需复制指针(或者如果它以与 VList 类似的方式实现,则可能不需要 - 我没有在document 以指示它使用的策略),因此特定组不会在其 QList 每次增长时都重新分配。
关于c++ - 当堆中分配的对象变大时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14883957/