Во-первых, вам нужно использовать remove()
вместо erase()
(последнему потребуется итератор в качестве аргумента)
Если вы используете немного другой цикл, как
std::list<Logic*>::iterator it = all.begin();
while (it != all.end()) {
Logic* current = *it;
++it;
current->update(deltatime);
}
Вы даже можете решить проблему siukurnin , о которой говорилось (удаление объекта логики во время обновления ()). list::remove()
не делает недействительными итераторы, кроме тех, которые указывают на удаленный элемент.
Помимо этого, я также голосую за то, чтобы это было изменением шаблона синглтона. И я бы посоветовал оставить исходное решение с отдельным классом управления, на тот случай, если вам понадобится два цикла с разным временем дельты или явная поддержка многопоточности (разные объекты логики в разных потоках) или что-то еще в будущем. *
По моему мнению, это общее преимущество синглтон-класса перед статическими методами (которые вы всегда можете использовать): вы можете легко увеличить свою функциональность, если захотите сделать это в будущем ...