addTargetedDelegate后CCLayer在场景后不会调用析构

结果反复测试,得出以下结论
只要这行代码pDispatcher->addTargetedDelegate(this, 0, false); 执行过,LogicLayer就不会自动调用析构了

class LogicLayer : public cocos2d::CCLayer

bool LogicLayer::init()
{
if (!CCLayer::init())
return false;

CCTouchDispatcher* pDispatcher = CCDirector::sharedDirector()->getTouchDispatcher();
pDispatcher->addTargetedDelegate(this, 0, false); 

return true;

}

切换代码如下
void GameLayer::menuCloseCallback(CCObject* pSender)
{
LogicLayer *logic_layer = sGame.logic_layer();

CCScene *scene = new CCScene();
CCLayer *layer = MainMenuLayer::create();
scene->addChild(layer, 0);
CCDirector::sharedDirector()->replaceScene(
    CCTransitionFade::transitionWithDuration(1.5f, scene));
scene->release();

}

难道让我touch用这些函数??下面这些是可以的,知道的大神指导一下^_^
virtual void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
virtual void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);

又去看了例子代码,貌似正统的写法是这样

void LogicLayer::onEnter()
{
CCLayer::onEnter();

CCTouchDispatcher* pDispatcher = CCDirector::sharedDirector()->getTouchDispatcher();
pDispatcher->addTargetedDelegate(this, 0, false);  

}

void LogicLayer::onExit()
{
CCLayer::onExit();

CCTouchDispatcher* pDispatcher = CCDirector::sharedDirector()->getTouchDispatcher();
pDispatcher->removeDelegate(this);  

}