采用单例模式的类前后两次调用数据不一样

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;
}


```

init()的时候this->retain()