当堆中分配的对象变大时会发生什么?

Rud*_*oza 1 c++ heap qt

假设我有一个名为Result m_result的成员变量

class Result{
QList<Group *> m_groups
}
Run Code Online (Sandbox Code Playgroud)

和集团

class Group{
QList<Data> m_data
}
Run Code Online (Sandbox Code Playgroud)

随着程序的继续,每个组的数据QList都在不断增长.所有组都在堆中分配(因此指针).实质上,每个组都在堆中分配ONCE.每次QList增长时,是否会重新分配特定组?另外,由于数据成员的增长,m_testResult是否会一遍又一遍地重新复制?

Pet*_*ham 7

在QList内部,会有指向实际保存数据的其他一些对象或数组的指针.随着列表的增长,将分配此后备数据的新对象,并删除现有的对象.您展示的代码不必担心它,但如果您实现自己的集合,那么您可以.一旦分配了对象本身就不会增长.

可以在这里找到QList的详细信息- 它使用指针数组<T>,因此不是链表.因为它使用指向元素的指针,所以在调整数组大小时不必复制元素,只需复制指针(如果它以类似的方式实现到VList,可能不会复制- 我没有在文档中看到任何内容指示它使用的策略),因此每次QList增长时都不会重新分配特定的组.