두 가지 방법이 있습니다.
삭제할 객체를 호출하면 실제로 두 개의 플래그가 설정됩니다.
1. 컨테이너에 객체가 삭제되었음을 알리는 것
컨테이너에 삭제 요청 된 개체를 알려주는 하나
void object::deleteObject()
{
container->objectHasBeenDeleted = true;
isToDelete = true;
}
하나
의 객체 벡터를 사용하는 것
std::vector<object*> objects;
그런 다음 업데이트 기능에서 객체가 삭제되었는지 확인하고 모든 객체를 반복하는지 확인하고 삭제 플래그가있는 객체를 제거하십시오.
void container::update()
{
if (objectHasBeenDeleted)
{
std::vector<object*>::iterator ListIterator;
for(ListIterator=objects.begin(); ListIterator!=objects.end();)
{
if( (*ListIterator)->isToDelete )
{
ListIterator = objects.erase(ListIterator);
delete *ListIterator;
}
else {
++ListIterator;
}
}
objectHasBeenDeleted = false;
}
}
2 개의
객체의 (포인터를 가리키는) 벡터 사용.
std::vector<object*> *objects;
업데이트 기능에서 객체를 삭제하려면 객체를 반복하고 삭제하지 않을 객체를 새 벡터에 추가하십시오. 객체 벡터를 삭제하고 포인터를 새 벡터로 설정
void container::update()
{
if (objectHasBeenDeleted)
{
std::vector<object*> *newVector;
unsigned long i;
for (i = 0; i < objects->size(); i++)
{
if (!objects->at(i)->isToDelete)
{
newVector->push_back(objects->at(i));
}
}
delete objects;
objects = newVector;
objectHasBeenDeleted = false;
}
}