1

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

class Result{
QList<Group *> m_groups
}

和组

class Group{
QList<Data> m_data
}

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

4

2 回答 2

7

在 QList 内部,将有指向其他一些实际保存数据的对象或数组的指针。随着列表的增长,将分配此支持数据的新对象并删除现有对象。您显示的代码不必担心它,但是如果您要实现自己的集合,那么您会的。对象本身一旦被分配就永远不会增长。

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

于 2013-02-14T21:03:59.717 回答
2

我不知道QList具体,但总的来说,我希望以下内容:

  • 添加新元素后,QList分配 ( new) 更多内存并将最后一个元素链接到新元素。

  • 删除(现有)元素后,该元素的前任将链接到其后继元素,并且保存该元素的内存是delete-ed。

  • 这是任何链表如何工作的一般原则,例如std::liststd::slist

  • 对象永远不会增长,但内存可以被反复声明和释放。

于 2013-02-14T21:05:28.557 回答