指针的引用

1
2
3
roleDownAnim->setCompleteListener([&](spTrackEntry* entry){
RM_NODE(roleDownAnim);
});

这段代码,是给一段动画设置一个播放完的回调,回调函数我采用了 C++ lambda 表达式的形式。

中括号里的 & 表示我采用引用传参的方式捕获外部参数。在动画播放完成时,删除这个动作。

这里的问题是,lambda里的 roleDownAnim 是对外部的那个 roleDownAnim 的一个引用,也就是对一个指针的引用。这个时候内部的 roleDownAnim 的值相当于对外部的roleDownAnim进行取地址操作得来的: &roleDownAnim(外部的那个)。

但是我一直误以为两个 roleDownAnim 是一样的,导致了后面的 BAD_ACCESS 崩溃错误。

这里面要改的话,只要把 lambda 的中括号里的 & 改为 =,也就是把引用传参的方式改为值传参就好了。