В функции класса MainLayer init() я использую статический вектор для хранения указателя блока класса, который расширяет узел. И затем, через 5 секунд (я использую расписание для запуска функции runBlock()), я пытаюсь получить данные, которые хранятся в статическом векторе.Что такое управление памятью в cocos2dx 3.10?
Однако данные, которые я получил, были неправильными. Из отладки я понимаю, что это ошибка памяти. данные, которые я инициализирую, выглядят как удаленные.
Я не понимаю, почему данные были удалены. Пожалуйста, помогите мне, спасибо!
Вот мой код ключа:
MainLayer.cpp
std::vector<block*> MainLayer::block_array = std::vector<block*>();
bool MainLayer::init(){
Layer::init();
...
//the schedule
schedule(schedule_selector(MainLayer::runBlock), 5.0f, CC_REPEAT_FOREVER, 0.0f);
//initialization the data
block* b1 = block1::create();
block* b2 = block2::create();
block* b3 = block3::create();
block_array.push_back(b1);
block_array.push_back(b2);
block_array.push_back(b3);
this->addChild(b1->node);
this->addChild(b2->node);
this->addChild(b3->node);
return true;
}
void MainLayer::runBlock(float dt){
Size size = Director::getInstance()->getVisibleSize();
int len = block_array.size();
int rand = floor(CCRANDOM_0_1()*len);
if (rand == len){
rand -= 1;
}
//here is the problem, the memory which "bb" point is not be allocated
//by the way, the value of bb equals b1 when initialize the data (I mean the memory address is equal, but the data in memory is different)
block* bb = block_array[0];
bb->come(); //this is function in class block
}
Не забудьте выпустить позже – Striker
Используйте 'Cocos2D :: VECTOR'. Он автоматически сохранит и разблокирует элементы. – Zen