fis*_*her 0 c++ qt list shared-ptr
我知道这个问题已被要求死亡,但我想知道是否有任何方式做我在问题中所说的而不使用Boost库指针等.基本上我有以下一段清理代码删除指向的对象通过二维QList中的指针(QList <QList>)
#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();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试清理由非唯一或共享(这是正确的术语?)指针填充的列表时,它确实崩溃了,例如当m_Data [0] [1]等于m_Data [1] [1]时.
我知道为什么它崩溃所以请保存解释,但我想知道是否有安全删除这些对象尽可能少的代码修改.
最简单的方法是创建一个临时的std::set<MyObject*>.迭代m_Data,而不是立即删除指针,将它们添加到集合中.接下来,删除集合中的所有指针.a中没有重复项std::set.
您可以安全地删除NULL指针.无需检查