***************************************转载请注明出处:http://blog.youkuaiyun.com/lttree******************************************
使用 cocos2d-x 中的 Vector的时候,
在删除某个对象的时候出现了个错误,很崩溃啊.....
Vector<Bullet*>* bullets;
// 遍历每个bullet,让他们自己更新
for ( auto it = bullets->begin();it!=bullets->end();it++)
{
(*it)->update();
// 获取子弹生命,若子弹已经消亡,释放
if( (*it)->getLife() ) {
Bubblet* b = *it;
bubblets->eraseObject(b);
this->removeChild( b,true );
}
}
就会发生错误——vector iterators incompatible;
或许是我 打开的方式不对,于是用C++11方法:
Vector<Bullet*> bullets;
for( auto& b : bullets ) {
b->update();
if( b->getLife() ) {
bubblets.eraseObject(b);
this->removeChild(b,true);
}
}
还是不行。。。
找了很久,发现,
据说是因为,迭代器遍历的时候,如果把当前的给删除了,那么后面就乱套了,无法继续进行下去了,
所以,会崩溃。
于是乎,如果通过迭代器来遍历,就这么改:
// 遍历每个bullet,让他们自己更新
for ( auto it = bullets->begin();it!=bullets->end();)
{
(*it)->update();
// 获取子弹生命,若子弹已经消亡,释放
if( (*it)->getLife() ) {
Bubblet* b = *it;
it = bubblets->eraseObject(b);
this->removeChild( b,true );
}
else {
it++;
}
}
迭代器的移动,不再靠循环,而是靠判断语句。
可惜,通过C++11方法的遍历,我还没想到要怎么改。。。
***************************************转载请注明出处:http://blog.youkuaiyun.com/lttree******************************************
Cocos2d-x中Vector迭代器删除元素导致崩溃问题解决
本文详细介绍了在使用Cocos2d-x库中的Vector容器时,删除元素可能导致的迭代器不兼容错误,并提供了解决方案。通过修改遍历方式,确保在删除元素时不破坏迭代器链,成功避免了程序崩溃。
3918

被折叠的 条评论
为什么被折叠?



