gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:19 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com