gameObjects
- std::map<sf::String,VisibleGameObject*>
, а results
- std::map<sf::String,VisibleGameObject*>::iterator
. Когда это работает:карта уничтожить итератор, не вызывая соответствующих деструкторов
return gameObjects.erase(results);
Я ожидал, что деструктор VisibleGameObject бежать, что:
VisibleGameObject::~VisibleGameObject(){
m_pSceneManager->removeSprite(name);
}
никогда не работает, до того класса, который держит gameObjects
разрушен, который затем проходит:
GameObjectManager::~GameObjectManager(){
std::for_each(gameObjects.begin(),gameObjects.end(),GameObjectDeallocator());
}
struct GameObjectDeallocator{
void operator()(const std::pair<sf::String,VisibleGameObject*>&p) const{
delete p.second;
}
};
затем он запускается. Почему он не работает в первом случае?
Использование SFML 2.0
Благодарность
Почему вы ожидаете деструктор 'VisibleGameObject' работать, когда вы уничтожить' VisibleGameObject * '? Нет 'VisibleGameObject' уничтожается, только указатель. –
Не используйте голые указатели в C++. Шутки в сторону. Их трудно понять, утомляя рассуждения и почти всегда причиной чьего-то недоразумения. –
Потому что я тупой! Я так много раз совершал ошибки, я должен учиться! – pighead10