The following should work:
// Check for Collisionsfor( std::list<Projectile*>::iterator projNode = ProjectileList.begin(); projNode != ProjectileList.end(); ++projNode ){ Projectile *projSwap = (*projNode); if(SpriteCollisionTest(dynamic_cast<Sprite&>(*projSwap), dynamic_cast<Sprite&>(*playerMothra))) { (*projNode)->Kill(); } else { for( std::list<Enemy*>::iterator enemyNode = EnemyList.begin(); enemyNode != EnemyList.end(); ++enemyNode ) { Enemy *enemySwap = (*enemyNode); if(SpriteCollisionTest(dynamic_cast<Sprite&>(*projSwap), dynamic_cast<Sprite&>(*enemySwap))) { (*projNode)->Kill(); (*enemyNode)->Hit(); } //delete enemySwap; <---remove } } //delete projSwap; <---remove}
Keep in mind smart pointers are NOT STL container safe. I normally store
plain old pointers in the container and when I need to move it around I throw
it into a smart pointer.