QList内存释放

时间:2010-02-16 16:52:59

标签: qt qt4 dynamic-memory-allocation qlist memory-management

我正在尝试使用QList后释放内存,但它似乎无法正常工作。 这是我的代码:

QList<double> * myList;
myList = new QList<double>;

double myNumber;

cout << "CP1" << endl;
getchar();  // checkpoint 1

for (int i=0; i<1000000; i++)
{
    myNumber = i;
    myList->append(myNumber);
    cout << myList->size() << endl;
}

cout << "CP2!" << endl;
getchar();  // checkpoint 2


for (int i=999999; i>0; i--)
{
    myList->removeLast();
    cout << myList->size() << endl;
}

cout << "CP3!" << endl;
getchar();  // checkpoint 3

delete myList;

cout << "CP4!" << endl;
getchar();  // checkpoint 4

内存使用情况:

  • CP1:460k
  • CP2:19996k
  • CP3:19996k
  • CP4:16088k

所以看起来尽管删除了元素并删除了myList仍在使用大部分内存。我相信有办法处理它,但我找不到它。

提前感谢您的帮助。

的Pawel

2 个答案:

答案 0 :(得分:3)

内存管理器不需要释放程序分配的内存。你的释放没有问题。

答案 1 :(得分:0)

QList是基于数组的列表。阵列会自动扩展,但不会自动缩小。从列表中删除元素不会影响数组的大小。

要将数组修剪为实际大小,请创建一个新的QList并将其添加到其中。然后删除原始列表。

不幸的是,似乎没有方便的方法来执行此操作,例如.NET中的List.TrimExcess()。