有没有办法安全地删除非唯一指针的QList到MYOBJECT?
我知道这样的问题已经被问到死,但我想知道是否有无论如何使用Boost库指针等做我的问题说没有基本上我有以下的一段清理代码删除对象的双维度的QList(的QList <的QList>)有没有办法安全地删除非唯一指针的QList到MYOBJECT?
#include <QList>
QList< QList<MyObject*> > m_Data;
...
void CleanupMyObjectList
{
int numFrames = m_Data.size();
for(int i=0; i < numFrames; i++)
{
int numObjects = m_Data.at(i).size();
for(int j=0; j < numObjects; j++)
{
MyObject* removedObject = m_Data[i].at(j);
if(removedObject != NULL)
{
delete removedObject;//This assumes that the pointers are UNIQUE in this list!!! If not it will crash!!!
removedObject = NULL;
}
}
m_Data[i].clear();
}
m_Data.clear();
}
指向指针,当我试图清理非唯一或共享(填充列表它确实崩溃是这个正确的术语?)的指针,例如,当M_DATA [0] [1]等于M_DATA [1] [1]。
我知道为什么会崩溃,所以请保存解释为,而是我想知道是否有无论如何与代码尽可能小的修改安全地删除这些对象。
最简单的方法是创建一个临时std::set<MyObject*>
。迭代m_Data,而不是直接删除指针,将它们添加到集合中。接下来,删除集合中的所有指针。 std::set
中没有重复项。
您可以安全地删除NULL
指针。无需检查
不错!我从来没有想过使用临时容器来完成这项工作。我想我也可以使用Qt库QSet来做同样的事情吗? – fisyher 2011-04-07 09:25:53
是的,你可以做到这一点。 – 0xbaadf00d 2011-04-07 09:35:08
或使用std :: sort和std :: unique。 – 2011-04-07 09:46:07
因为你不希望使用升压共享指针, 您可以使用QList< QList<QSharedPointer<MyObject>> > m_Data;
代替QList< QList<MyObject*> > m_Data;
是myObject的也许是自QObject衍生? – 0xbaadf00d 2011-04-07 09:36:09