2つの方法があります。
削除するオブジェクトを呼び出すと、実際には2つのフラグが設定されます。
1.オブジェクトが削除されたことをコンテナに伝えるもの
2.削除するように要求されたオブジェクトをコンテナに伝えるもの
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;
}
}
二つの
オブジェクトのベクトル(へのポインタ)を使用。
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;
}
}