QList освобождение памяти - PullRequest
       13

QList освобождение памяти

4 голосов
/ 16 февраля 2010

Я пытаюсь освободить память после использования 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 ]

3 голосов
/ 16 февраля 2010

Менеджер памяти не требуется для освобождения памяти, выделенной вашей программе В вашем освобождении нет проблем.

0 голосов
/ 17 февраля 2010

QList является списком на основе массива. Массив расширяется автоматически, но не сжимается автоматически. Удаление элементов из списка не влияет на размер массива.

Чтобы обрезать массив до фактического размера, создайте новый QList и добавьте в него содержимое. Затем удалите исходный список.

К сожалению, похоже, что для этого нет удобного метода, такого как List.TrimExcess () в .NET.

...