【发布时间】:2013-01-08 23:17:17
【问题描述】:
我有一个配对列表。 遍历列表并删除第一个和第二个元素是个好主意吗? 其中的对象是用new分配的。
list<pair<string,GraphObject*>>* table;
for(i=0; i< length; i++){
it = table[i].begin();
while(it != table[i].end()){
delete (*it).second;
delete &(*it).first;
}
}
编辑: 字符串没有分配新的,我现在知道我不必删除它。 这样删除第二个可以吗?
【问题讨论】:
-
每对中的
string对象如何分配new?它不是指针类型... -
谢谢安迪,你完全正确。问题已编辑。
-
首先,做
delete &(*it).first;是很糟糕的。您正在尝试使用自动存储(即在堆栈上分配)释放对象,就好像它是在堆上分配的一样。其次,您删除了这些对象,但我没有看到您从列表中删除了相应的条目,这将使您在列表本身中留下悬空指针。第三,您不应该使用裸(原始)指针,而应使用诸如shared_ptr之类的智能指针来处理对象的生命周期。new和delete几乎从不需要,而且几乎总是不鼓励。
标签: c++ list memory-leaks stl iterator