Определите список указателей, который уничтожает объекты, адресуемые этими указателями, во время уничтожения самого списка или при удалении элемента из списка операцией remove.
Я в общем тестил просто из std::list просто так не удаляются, нужно сделать наследование и переопределить std::list::remove и деструктор тоже добавим в нем удалим память. В общем от примерчик:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#include <iostream> using std::cout; using std::endl; #include <list> using std::list; class list1 : public list<int*> { public: void remove(list::iterator it) { int* temp=*it; list::remove(*it); delete temp; } ~list1() { while(!list::empty()) { delete *list::begin(); list::remove(*list::begin()); } cout <<"konec"<<endl; } }; int main() { list1 l; int* b1=new int(4); int* b2=new int(5); cout <<*b1<<' '<<*b2<<endl; //добавляем указатели на объекты l.push_back(b1); l.push_back(b2); //удаляем cout <<*l.begin()<<' '<<b1<<endl;//адреса одинаковые l.remove(l.begin());//удаление l.remove(l.begin());//удаление //если через delete то удаляется //delete b1; //утак удалить объект cout <<*b1<<' '<<*b2<<endl; if(l.empty()) cout <<"l is empty"<<endl; return 0; } |
[youtube]http://www.youtube.com/watch?v=40M-LQvjVJk[/youtube]