Я знаю, что этот вопрос задавался до смерти, но я хотел бы знать, есть ли возможность сделать то, что я сказал в вопросе без , используя указатели библиотеки Boost и т. Д. В основном у меня есть следующеефрагмент кода очистки, который удаляет объекты, на которые указывают указатели в двойном измерении 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();
}
, и он действительно падает, когда я пытаюсь очистить список, заполненный неуникальнымили совместно используемые (это правильный термин?) указатели, например, когда m_Data [0] [1] равно m_Data [1] [1].
Я знаю, почему это происходит сбой, поэтому, пожалуйста, сохраните объяснение дляэто, скорее, я хочу знать, есть ли возможность безопасно удалить эти объекты с минимальным изменением кода, насколько это возможно.