Я не уверен, как решить эту проблему:
Класс 'Player' поддерживает список объектов Bullet *:
class Player
{
protected:
std::list< Bullet* > m_pBullet_list;
}
Когда игрок запускает Bullet, он добавляетсяв этот список.Кроме того, внутри конструктора bullet в CollisionMgr обновляется ссылка на тот же объект, где CollisionMgr также содержит список Bullet *.
Bullet::Bullet(GameGL*a_pGameGL, Player*a_pPlayer)
: GameObject( a_pGameGL )
{
m_pPlayer = a_pPlayer;
m_pGameGL->GetCollisionMgr()->AddBullet(this);
}
class CollisionMgr
{
void AddBullet(Bullet* a_pBullet);
protected:
std::list< Bullet*> m_BulletPList;
}
In CollisionMgr.Обновить();основываясь на некоторых условиях, я заполняю class Cell
, которые снова содержат список Bullet *.Наконец, определенные условия определяют, что Bullet будет удален.Теперь эти условия проверяются при переборе списка ячеек.Итак, если мне нужно удалить объект Bullet из всех этих мест, как мне это сделать, чтобы больше не было висящих ссылок на него?
std::list< Bullet*>::iterator bullet_it;
for( bullet_it = (a_pCell->m_BulletPList).begin(); bullet_it != (a_pCell->m_BulletPList).end(); bullet_it++) {
bool l_Bullet_trash = false;
Bullet* bullet1 = *bullet_it;
// conditions would set this to true
if ( l_Bullet_Trash )
// TrashBullet( bullet1 );
continue;
}
Кроме того, я читал о list :: remove , и там упоминается, что он вызывает деструктор объекта, который мы пытаемся удалить.Учитывая эту информацию, если я удалю из одного списка, объект не существует, но список будет по-прежнему содержать ссылку на него .. Как мне решить все эти проблемы?