***************************************转载请注明出处:http://blog.csdn.net/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.csdn.net/lttree******************************************

最新文章

  1. Techparty-广州Javascript技术专场(学习分享)
  2. springBoot专题3----&gt;springBoot与多数据源的配置
  3. Windows Store App JavaScript 开发:页内导航
  4. Git命令行初体验
  5. Springfox Reference Documentation
  6. Linux下如何发布Qt程序
  7. Dom4j 添加 / 更新 / 删除 XML
  8. Swift和C#的基本语法对比
  9. 临时和永久修改oracle sysdate的默认输出格式
  10. mybatis在mysql和oracle批量插入不同
  11. Solidity教程系列1 - 类型介绍
  12. Sublime Text 使用教程
  13. linux下的Shell编程(5)循环
  14. nodejs的jekins部署
  15. nodejs+mysql入门实例(增)
  16. 【liferay】4、liferay的权限体系
  17. linux中chown命令
  18. [UVALive 3902] Network
  19. zabbix3.2源码升级至3.4
  20. Python函数标注

热门文章

  1. 【JavaScript 4—基础知识点】:函数
  2. 算法复习——bitset(bzoj3687简单题)
  3. Redis的持久化——RDB
  4. cf682E Alyona and Triangles
  5. LA 3263 平面划分
  6. Gdb学习笔记1
  7. spl_autoload_register() &amp;&amp; __autoload函数
  8. 533. Lonely Pixel II
  9. 四则运算表达式树 C++模板 支持括号和未知数
  10. javaWeb_Request对象