Да, будет утечка памяти.Как правило, у вас должен быть один delete
для каждого new
в вашей программе.
В вашем конкретном случае неисправная логика происходит намного раньше, чем уничтожение temp_var
.Вы выделяете элементы, а затем сохраняете копию этих элементов в списке.Вы должны немедленно уничтожить оригинальные, больше не используемые вещи.
Ваш цикл for может быть следующим:
for(int i = 0; i<10; i++ )
{
MyType* item = new MyType(); // get me an item.
list << *item; // put copy of item in list
delete item; // destroy my item
}
Если выразить это таким образом, очевидно, что мы не должны использовать new
вообще!
for(int i = 0; i < 10; i++)
{
MyType item;
list << item;
}
Эта версия не будет течь, при условии, что MyType
не имеет собственных ошибок управления памятью.
РЕДАКТИРОВАТЬ : Кстати, если бы ваша программа была:
QList<MyType*> f() // List of POINTERS
{
QList<MyType*> list;
for(int i = 0; i<10; i++ )
{
MyType* item = new MyType();
list << item; // Storing a POINTER
}
return list;
}
Тогда, да, у вас была бы именно та утечка памяти, которую вы ожидали.QList
автоматически не предоставляет delete
для типов указателей.