меня попросили оптимизировать гр проект ++ и там я уже сталкивался с этой «утечкой памяти» ситуация внутри кода класса (пример упрощен, но главная проблема ясна):C++ исправить утечку памяти
std::list<T*> _list;
void func(){
T* obj = some_func();
if (!obj){
obj = new T();
_list.push_back(obj); // Here is a leak,we do not know when *obj will be removed from _list to call its destructor
}
obj->some_field = some_value;
}
/*_list will be used and managed somewhere else
and we do not know actually when, where and how.*/
Так как это можно исправить элегантно? К элегантным я имею в виду, не определяя свой собственный контейнер. Нужно ли использовать некоторые умные указатели?
ОБНОВЛЕНИЕ. Это не C++ 11. Так что нет полезных полезных материалов
Как вам удалось нажать 'T *' в список 'T'? Имеет ли 'T' конструктор, который принимает' T * '? – juanchopanza
Вы действительно наблюдали утечку памяти? Этот код является разумным, если список принадлежит владельцу объекта. –
Я не думаю, что основная проблема понятна вообще. Не могли бы вы уточнить? – molbdnilo