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

标签 c++ qt heap-memory

假设我有一个成员变量叫做 结果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/

相关文章:

c++ - 如何使用 C++ 增加 Visual Studio 内部版本号?

c++ - 带有字符串可选参数的QT C++函数

c++ - 使用 QIconEngine 和透明度自定义 QIcon

c++ - 为什么动态内存分配(堆)出现运行时错误?

c++ - 我试图找到梅森素数

c++ - 按下按钮期间没有事件捕获 [QT]

java - 年老代需要多满才能触发主 GC 周期?

debugging - 堆扩展命令失败 : failed to initialize the extention

c++ - 无法构建多部件 QtDesigner 插件

c++ - 从禁用的 QComboBox 中删除箭头,同时尊重样式