私が使用しているコードの簡略版は次のとおりです。
namespace BasketNovel {
void Engine::BuryEntities()
{
std::list<Entity*>::iterator iter = p_entities.begin();
while (iter != p_entities.end())
{
if ( (*iter)->getAlive() == false )
{
delete (*iter);
iter = p_entities.erase( iter ); //.erase returns next element
}
else iter++;
}
}
}
Intel Static Analysis から次の警告が表示されます。
BasketNovel.cpp(567): 警告 #12221: "std::_List_iterator > > std::list >::erase(std::_List_const_iterator > >)" の呼び出しで実引数 2 として渡されたオブジェクト "iter" のスライスが発生します暗黙の型変換による
これは基本的に、次の場所で暗黙的な型変換を引き起こしていると言っていると思います。
iter = p_entities.erase( iter );
(注: コードを次のように変更しても、同じ警告が表示されます: p_entities.erase( iter++ ); )
上記で「スライス」しているものをよく理解していません。これは正確には何を意味し、この警告を解決するにはどうすればよいですか? 警告メッセージを完全にオフにするよりも、コードを少し複雑にしたほうがよいでしょう。