Позвольте мне объяснить вам, я работаю над механизмом рендеринга с библиотекой SFML
Что я сделал, я создал объект Game
с sf::RenderWindow *window
, который показывает все:
void Game::renderize() {
for (auto it : all_sprites) {
window->clear(background);
window->draw(it->getSprite());
}
}
Я понимаю, что этот новый for
копирует данные каждого объекта в контейнере (в данном случае all_sprites
равен std::list
) до тех пор, пока он не закончится, дело в том, что когда я пытаюсь удалить объект ... вв режиме реального времени ... с erase
методом ... он дает сбой и память сбрасывается ... мой учитель только что сказал мне ... "просто переместите координаты спрайта в место, где вы его не увидите"., поэтому я сделал эту функцию:
void Game::rmvObj(sf::String currence) {
for (auto it : all_sprites) {
if (it->getName() == currence) it->kill();
}
}
Дело в том ... этот метод не работает ... и я понимаю, почему ... новый for
просто копирует данные в интегратор... так что это не то же самое, что:
void Game::rmvObj(sf::String currence) {
for (std::list<Object2D*>::iterator it = all_sprites.begin(); it != all_sprites.end(); ++it) {
if ((*it)->getName() == currence) (*it)->kill();
}
}
, который указывает на объект real в списке, а не на копию ... Я ненавижу большие выражения в for
так ...
Как я могу напрямую изменять объекты в списке, используя новый C ++ 11 for