에서 유지 나는이 문제를 접근하는 방법을 잘 모르겠습니다 포인터 객체를 제거 총알을 발사하면이 목록에 추가됩니다. 또한 bullet 생성자 내부에서 동일한 객체에 대한 참조가 CollisionMgr에서 업데이트됩니다. CollisionMgr은 Bullet * 목록을 유지합니다.그 기준 세 가지 목록
Bullet::Bullet(GameGL*a_pGameGL, Player*a_pPlayer)
: GameObject(a_pGameGL)
{
m_pPlayer = a_pPlayer;
m_pGameGL->GetCollisionMgr()->AddBullet(this);
}
CollisionMgr.Update에서
class CollisionMgr
{
void AddBullet(Bullet* a_pBullet);
protected:
std::list< Bullet*> m_BulletPList;
}
(); 어떤 조건에 따라 class Cell
을 채우고 다시 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을 읽고 있었다, 그리고 그것이 우리가 삭제하려고하는 개체의 소멸자를 호출하는 것을 언급하고있다. 이 정보가 주어지면 한 목록에서 삭제하면 개체가 존재하지 않지만 목록에 여전히 참조가 포함되어있을 수 있습니다. 이러한 모든 문제를 어떻게 처리합니까?
다소 이해하지만 좀 더 구체적으로 알려주시겠습니까? 검색에 좋은 키워드는 무엇입니까? – brainydexter
Boost [shared_ptr and weak_ptr] (http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/smart_ptr.htm)를 살펴보십시오. –