您好我想问一下: 我有地图和清单
问题:
以下是对析构函数的实现是否正确:
for (map<string,SymbolTableNode*>::iterator i = symbolTable.begin();
i != symbolTable.end(); ++i)
{
delete i;
}
symbolTable.clear();
还是我想念一些记忆?
关于清单:
list<MyClass2*> mylist;
mylist.push_front(new MyClass());
mylist.pop_front();
弹出调用删除吗?或者我在这种情况下有内存泄漏?如果存在泄漏问题,那么我该怎么做才能避免呢?
谢谢。
答案 0 :(得分:4)
否pop_front
不会调用删除。在弹出指针之前,你必须自己删除它。:
list<MyClass2*> mylist;
mylist.push_front(new MyClass());
delete mylist.front();
mylist.pop_front();
析构函数应该是:
delete i->second;
答案 1 :(得分:3)
更明确地说:
list<boost::shared_ptr<MyClass2> > mylist;
mylist.pop(); // now it will invoke delete
答案 2 :(得分:1)
你真的需要一个指针列表吗?你不能有一个简单的清单吗?
list<MyClass> mylist;
mylist.push_front(MyClass());
它将为您节省内存管理的痛苦。
如果需要指针,请使用boost:http://www.boost.org/doc/libs/1_46_1/libs/ptr_container/doc/ptr_container.html
中的智能指针或指针容器答案 3 :(得分:0)
delete i;
错误。
这应该是这样的:
delete i->second;
因为i
指向一对。
答案 4 :(得分:-1)
地图的迭代器元素是一对,所以正确的删除调用是:
delete (*i).second;
P.S。 好的 - 现在我看到你修好了这个:)。