Post

[공유] STL에서 포인터 콜렉션 삭제하는 방법

출처 AiWisdom님의 블로그 | 갱주니
원문 https://blog.naver.com/process3/20017861604

Effective STL 나와 있는 포인터 콜렉션 삭제하는 방법이다.
(Effective C++ 책을 읽으면서도 느낀것이지만 Scott Meyer는
정말 천재이다. 세상에는 천재가 너무많아 ㅡ,ㅡ)

멀티 스레드 일때는 Iterator 구간에서 동기화를 꼭 해야 한다.

안하면 메모리 억세스 오류 발생하고 STL 버그로 생각한다.

그러나 경헙상 STL 버그는 거의 없고 사용하는 쪽에서 잘못

사용한 것이다. 즉, 내가 프로그램 잘못 한것이다. (ㅠ,ㅠ)

map은 associative 콜렉션을 참조하게 된다.

순차형(sequential) 콜렉션

1
2
3
4
5
6
7
8
9
10
11
typedef list<OBJECT*> OBJECTS; OBJECTS objects; ...
for (OBJECTS::iterator itr(objects.begin()); itr != object.end(); )
{
    OBJECT* pObject = *itr;
    if (should_delete(pObject))
    {
         itr = objects.erase(itr);
         delete pObject;
    }
    else itr++;
}

연관형(associative) 콜렉션

1
2
3
4
5
6
7
8
9
10
11
typdef map<int, OBJECT*> OBJECTS; OBJECTS objects; ...
for (OBJECTS::iterator itr(objects.begin()); itr != object.end(); )
{
    OBJECT* pObject = itr->second;
    if (should_delete(pObject))
    {
        objects.erase(itr++);
        delete pObject;
    }
    else itr++;
}