动态内存在QList
-
19-09-2019 - |
题
我没有太多的经验与建和这个问题就出来了今天。
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分配的记忆你有几种选择
- 确保析构被称为(使用删除{假设你的新会的列表中第一位}或允许QList对象的范围)
- 分配的空白名单给你的大名单(认为这种将工作)
其他提示
回想阅读有关这样的:
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();
不隶属于 StackOverflow