关于CCCallFuncND()传递参数内存释放的问题

大家好,比如下面这个程序:
int *value = new int(3);
CCCallFuncND func = CCCallFuncND::create(this, callfuncND_selector(GameLayer::addCoins),(void) value);
CCDelayTime *delay = CCDelayTime::create(10.0f);
node->runAction( CCSequence::create(delay, func, NULL) );

void GameLayer::addCoins((CCNode* sender, void* data)
{
int value = (int) data;

// some code…

delete value;
}

我们用的cocos2dx版本是2.1.2,我们发现,如果在delay时间前就把node给remove掉,则是不会调用到GameLayer::addCoins(),那是不是new出来的value就没机会delete了,就内存泄漏了?所以想确认下会不会导致内存泄漏?如果会的话新版本的cocos2dx有没有解决这个问题?谢谢!

会存在的,新版本依然如此。你创建的时候是new出来的,需要自己去delete,并不具备coco的内存管理功能。

谢谢回答!那这种情况自己怎么去delete呢?GameLayer::addCoins()压根没调用

这需求本身就有问题,既然都不执行那段代码,还写干嘛…
如果一定要这样的话,我会重载onExit()函数,在这函数里面delete。:13::13:

GameLayer::addCoins()不执行是因为node被移除了(这是引擎底层的机制,我们上层没法控制的)。本来如果保证GameLayer::addCoins()一定会被执行的话,我在外面new一个数据传给它,然后在它里面delete掉,是不会有内存泄漏的。
如果将new的数据存在node里,在node的onExit()函数里delete掉,不过这样维护起来比较麻烦。