从向量中擦除指针
Posted
技术标签:
【中文标题】从向量中擦除指针【英文标题】:Erasing a pointer from a vector 【发布时间】:2010-11-29 15:08:54 【问题描述】:我正在尝试擦除指向对象的指针,但我一直在崩溃控制台 (PS2),由于控制台的设置方式,我没有收到任何错误,所以我不太确定是什么正在进行中。
我已经列出了错误的两行,直到我添加了这些行才出现错误。
for(listIter = m_downDirectionList.begin(); listIter != m_downDirectionList.end(); listIter++)
Projectile* proj = dynamic_cast<Projectile*>(*listIter);
if (proj->getZWorldCoord() >= (defaultLevelDepth + zOffset))
proj->getPoolOwner()->releaseAProjectile(proj);
//(*listIter) = NULL; // THIS ERRORS, also tried = 0.
//listIter = m_downDirectionList.erase(listIter); // THIS ALSO ERRORS
else
(*listIter)->update(camera, zOffset);
我做错了什么?
谢谢。
编辑: 澄清一下,只有这一行。
listIter = m_downDirectionList.erase(listIter);
这也是错误的。
【问题讨论】:
我真的不知道m_downDirectionList
是什么,或者releaseAProjectile
是做什么的。我也不知道是哪种错误,或者你的测试技术,或者错误是否一致。
关于编辑。如果您指的是我的解决方案,我所做的不仅仅是添加该行。我还将迭代器增量移动到 else 块。发布后我打算用解释来编辑我的答案,但Kos 已经解释了这个问题。
欺骗***.com/questions/2728551/c-iterators-problem/2728567 ?
【参考方案1】:
for(listIter = m_downDirectionList.begin(); listIter != m_downDirectionList.end(); )
Projectile* proj = dynamic_cast<Projectile*>(*listIter);
if (proj->getZWorldCoord() >= (defaultLevelDepth + zOffset))
proj->getPoolOwner()->releaseAProjectile(proj);
listIter = m_downDirectionList.erase(listIter);
else
//m_downDirectionList[p]->update(camera, zOffset);
(*listIter)->update(camera, zOffset);
listIter++
【讨论】:
也正确和优雅(我对 ++listIter 的评论仍然成立,虽然:)) 需要注意的是,这是行得通的,因为它是一个向量(是的,这很清楚,但问题和答案在空间上很远......)。【参考方案2】: m_downDirectionList.erase (listIter);
【讨论】:
以上是关于从向量中擦除指针的主要内容,如果未能解决你的问题,请参考以下文章