Вам не нужно 2 вектора. Итератор, возвращаемый std::remove_if()
, может использоваться, чтобы узнать, какие объекты должны быть delete
'd:
std::vector<GameObject*> gameObjects;
...
auto newEnd = std::remove_if(
gameObjects.begin(), gameObjects.end(),
[](GameObject* p) { return p->isDestroyed(); }
);
for(auto iter = newEnd; iter != gameObjects.end(); ++iter) {
delete *iter;
}
gameObjects.erase(newEnd, gameObjects.end());
Если вы измените свой вектор на std::unique_ptr<GameObject>
вместо GameObject*
, вы не сможете Больше не нужно delete
объектов вручную:
std::vector<std::unique_ptr<GameObject>> gameObjects;
...
gameObjects.erase(
std::remove_if(
gameObjects.begin(), gameObjects.end(),
[](std::unique_ptr<GameObject> &p) { return p->isDestroyed(); }
),
gameObjects.end()
);