QuestManager类中声明了一个静态变量 static std::list<Quest*> questList用来存放所有的任务,QuestManager采用单例模式。
Questmanager中有一个checkQuest(QUEST_TYPE)的函数来检查任务是否完成,参数QUEST_TYPE是任务类型,减少检查任务是否完成操作的执行时间。

在敌人死亡的函数里调用checkQuest函数并传入 ENEMY_KILLED 参数来区分要检查的任务类型。
第一次调用该函数可以正确执行,但是第二次调用就会出错。利用中断检查前后questList的内存,发现两次的数据不一样
附上QuestManager的部分代码
QuestManager * QuestManager::getInstance()
{
if (!instance)
{
instance = QuestManager::create();
//instance->initQuestList();
}
return instance;
}
bool QuestManager::init()
{
if (!Node::init()) return false;
enemyKilled = 0;
this->initQuestList();
return true;
}
void QuestManager::initQuestList()
{
for (int i = 0; i < 2; i++)
{
auto a = (QUEST_TYPE)(std::rand() % 2);
auto tmpquest = this->createQuest(a);
questList.push_back(tmpquest);
}
}
Quest* QuestManager::createQuest(QUEST_TYPE _t)
{
Quest* quest;
switch (_t)
{
case ENEMY_KILLED:
{
auto i = 10; //从文件读取需要消灭多少敌人
quest = EnemyKilled::createQuest(questID, i);
}
break;
case ENEMY_KILLED_IN_TIME:
{
auto i = 10; //从文件读取需要消灭多少敌人
auto j = 10; //从文件读取在多长时间内消灭
quest = EnemyKilledInTime::createQuest(questID, i, j);
}
break;
}
questID++;
if (quest)
return quest;
else
return nullptr;
}
```