STL 반복자(iterater)관련 질문입니다


(고드름) #1

언어는 C++ 이며
구현할 타일맵 내 객체를 관리하려고 질문합니다

어느 컨테이너에 대한 반복자가
해당 컨테이너 안의 요소를 가리키는 포인터 라고 알고있습니다

그렇다면 A클래스 안에서 여러개의 B클래스들을 요소로 가진 컨테이너가 있다면

만약 B클래스가

  1. 자신을 요소로 가진 A클래스
  2. 그 속의 컨테이너에 자신에 해당하는 반복자

의 구조체로 이루어진 컨테이너를 포함하고 있다면

B클래스 안의 1을 순회하며 2를 통해 자신을 erase시켜도 문제가 없을까요?


(L) #2

네 문제는 없습니다.

만약 컨테이너에 객체 자체를 넣는다고 하면 push 혹은 emplace를 사용하게 될겁니다(C++11 이상을 사용한다는 가정하에 말이죠). push는 객체를 복사하고, emplace는 참조합니다. 아마 작성자분이 원하신건 참조일겁니다. 만약 컨테이너에 객체의 포인터를 넣는 방법을 사용하신다면(container<T*> 꼴) push로 넣어도 참조입니다.

자신을 참조하는 컨테이너에서 그 참조를 제거해도 자신은 아무런 문제가 없습니다.

유의하실 점은 push로 동적할당한 객체의 포인터를 삽입했을 시에 발생합니다. 미리 자신을 다른 포인터/레퍼런스 변수를 이용해 참조해두지 않는다면, 모든 참조 제거 후 메모리 해제를 하지 않았기 때문에 메모리 누수의 위험이 있습니다.


(고드름) #3

답변 감사합니다!!!