Казалось бы, нет;если у вас есть вектор указателей на объекты, вызов erase () для удаления одного из них просто удаляет указатель из вектора.Вы все равно должны удалить его самостоятельно - это потому, что контейнеры STL предназначены главным образом для сбора объектов по значению.
Всего пара предложений - IMO ваш код будет более понятным, если вы используете алгоритмы STL, такие как std::find
вместо того, чтобы перебирать все ваши векторы вручную.Я не уверен, в чем смысл dead_objects vs object_list - вы, кажется, ничего не получите, сохранив их во временном векторе, но что-то могло быть потеряно при копировании кода в SO.И std::vector
не является оптимальным для множества случайных стираний, подобных этому, поскольку erase
выполняется за линейное время - std::remove
с последующим erase
будет более эффективным подходом.Например:
for(vector<object*>::iterator it = object_list.begin(); it != object_list.end(); ++it) {
if((*it)->is_dead()) {
delete *it;
*it = NULL;
}
}
object_list.erase(std::remove(object_list.begin(), object_list.end(), NULL), object_list.end());