我没有太多的经验与建和这个问题就出来了今天。

QList<int> memList;
const int large = 100000;

getchar();
for (int i=0; i<large; i++)
{
    memList.append(i);
}

cout << memList.size() << endl;
getchar();

for (int i=0; i<large; i++)
{
    memList.removeLast();
}

cout << memList.size() << endl;
getchar();

之后的第一个循环当我检查存储器使用它作为新的元素是附加的 memList 但后消除他们在第二循环存储器的使用保持在同一水平。我以为 QList 是动态的,它将免费存储时元,是除去。所以要么我失去了一些东西(很可能)或它不是动态的结构。你有任何想法,如何使它的工作?

关于

有帮助吗?

解决方案

文档 它的出现,这是预期的行为:

注意到内部阵只有不断得到更大生命的清单。它永远不会缩小。内部阵释放由析构并通过分配运营商,当一个列表中被分配到另一个。

如果你想de分配的记忆你有几种选择

  1. 确保析构被称为(使用删除{假设你的新会的列表中第一位}或允许QList对象的范围)
  2. 分配的空白名单给你的大名单(认为这种将工作)

其他提示

回想阅读有关这样的:

HTTP:// cplusplus- soup.com/2010/01/05/freedelete-not-returning-memory-to-os/

现在看来,这可能是内存分配/删除行为做的,但我不是100%肯定。

QList是半之间 QVector (类似于标准::矢量)和 QLinkedList (类似于标准::列表)。QList拥有一系列的指针到自己的对象。

这个方案意味着排序/重新排序的清单很快,但是指储存持续增长为项目被添加(类似于一个矢量)。因此,删除的项目列表中使用的内存物品,但不指数。

要回收的存储器,需要建造一个新的名单。QVector拥挤()但是,似乎不存在QList.

的QList被推荐用于<1000个对象的列表。如果你需要处理非常大名单和所需要的内存对象被删除待开垦,你应该考虑使用QLinkedList。

发件人的QList尝试此代码来自由存储器

while( ! memList.isEmpty() )
    delete memList.takeFirst();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top