STL list erase 사용할때 return 값을 이런 경우에도 해줘야 하나요?
STL 로 작성된 코드를 보다가 생긴 문의점 입니다.
보통 list의 요소를 erase 할때,
it = gSurfaceLoaders.erase( it );
또는 gSurfaceLoaders.erase( it++ );
식으로 다음 요소를 찾기위해 return 값을 이용하잖아요?
그런데 아래처럼 소멸자에서 erase를 할때 erase의 return 값을 다시 it에 넣지 않고 사용하면 어떻게 될까요?
계속 loop을 돌면서 지우는 경우 it 값을 업데이트 안해주면 엄한데를 찾을수 있잖아요?
그런데 아래 경우는 찾으면 바로 break를 해버립니다.
그래서 gSurfaceLoaders의 소멸자가 한번 호출되고
다시 다른 객체의 소멸자가 호출되었을때 list를 제대로 search 할수 있는지가 궁금합니다?
문제의 요인이 될수 있나요?
std::list gSurfaceLoaders;
SurfaceLoader::SurfaceLoader()
{
gSurfaceLoaders.push_back( this );
}
SurfaceLoader::~SurfaceLoader()
{
for( std::list::iterator it = gSurfaceLoaders.begin();
it != gSurfaceLoaders.end(); ++it )
{
if( (*it) == this )
{
gSurfaceLoaders.erase( it );
break;
}
}
}


댓글 달기