STGゲームなどの弾の管理をlistで行っているのですが削除のときの方法で質問です。
void FlagCheck()
{
 std::list<SHOOT>::iterator S;

 for(S = shoot.begin(); S != shoot.end(); S++)
 {
  if(T->GetFlag())
  {
   shoot.erase(T++);
  }
  else ++T;
 }
}
とやっています。
SHOOTは弾が物体にあたったときにflagがtureになるようなクラスです。
一応今は問題なく動いているのですが作るときに色々試した結果たまたま動いただけで
あまり理解ができていません。
shoot.erase(T++)をerase(++T)にしたりshoot.erase(T);T++;にするとエラーになってしまいます。
前者は無論理由はわかるのですが後者の理由がよくわかりません。
上の関数に欠点がないか、それとshoot.erase(T);T++;がエラーになってしまう理由を教えていただけないでしょうか。
よろしくお願いします。