2013-12-16 3 views
0

Я написал простой интерфейс, и я хочу создать глобальные векторные объекты-объекты класса, реализующего интерфейс. Так что я сделал следующее:Я получаю утечку памяти с помощью вектора

vector<SomeInterface*> ary; 

Я закомментирована весь код кроме: силы основных() и вектора арного; и теперь с помощью _CrtDumpMemoryLeaks(); в Visual Studio 2010 я получаю 1 блок утечки.

Как это исправить?

С уважением.

+0

Где вы дамп утечки памяти? Разве вектор был разрушен, когда вы его назвали? – Stewart

+0

Глобальные объекты живут за пределами 'main', а некоторые течеискатели проверяют утечки в конце' main'? – Yakk

+0

Я сбрасываю его прямо перед возвратом 0 ;. Вектор ничего не держит, как его разрушить? (Я попробовал удалить ary - не работает) – tomdavies

ответ

5

Необходимо удалить выделенную память. У вас есть два варианта:

for (auto *p : ary) delete p; 

или

vector<std::unique_ptr<SomeInterface>> ary; 

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

+0

работает как шарм! Спасибо :) – tomdavies

1

vector не является причиной утечек, я могу это гарантировать. Вы сохраняете в своем векторе SomeInterface* s. Я предполагаю, что вы выделите их (new SomeInterface(...)) и не удаляйте их нигде. Я предлагаю вам использовать смарт-указатели:

std::vector<std::unique_ptr<SomeInterface>> ary; 

Если вы не можете сделать это, вы должны удалить ваши распределения после их использования ...

for(SomeInterface* i : ary) 
    delete i; 
Смежные вопросы