2012-03-06 3 views
0

Я нахожусь в процессе изменения кода, написанного кем-то другим. В одной части кода они использовали указатель на вектор указателей.Указатель на вектор указателей

  class2 *pointofclass2 = new class2(); 

     class1 * pointofclass1 = new class1(.....) 

     pointofclass2->push_back(pointofclass1); 

Позже код

delete pointofclass2; 

Теперь я думаю, что это вызывает утечку памяти. Я никогда не сталкивался с этим раньше, поэтому не уверен, что это причина или нет? Любая помощь будет принята с благодарностью. Если да, то каков правильный способ освобождения памяти?

+0

Таким образом, 'class2' наследует от' vector'? Вы должны определенно удалить 'pointofclass2' так, как вы это делаете, но вам интересно, остается ли' pointofclass1' где-то в памяти? Он должен быть очищен в деструкторе 'class2'. Откуда вы знаете, что вы просачиваете память? Valgrind? – prelic

+0

A) У меня утечка памяти. например когда я запускаю программу, он продолжает использовать все больше и больше памяти (и это не должно) B) Я получаю, возможно, потерянный от Valgrind, который показывает строку с class1 * pointofclass1 = new class1 (....). – Robert

ответ

1

Вы удаляете pointofclass2, но, вероятно, не удаляете вектор, который содержит указатели класса 1 в деструкторе класса 1. Где объект, созданный в новом классе1 (...), удаляется? Это C++, автоматическая сборка мусора отсутствует.

Теперь, если class2 - это вектор, вам действительно не нужно нужно, чтобы создать указатель на него, так как векторы будут выделять память на куче в любом случае.

1

Если элементы, добавленные через push_back(), уничтожены в dor class2, это утечка.

Смежные вопросы