컨테이너를 바꾼 뒤에도 남아 있는 것
STL 컨테이너에는 원소를 추가하고 지우는 연산이 있다. 그 연산 뒤에 기존 반복자를 계속 사용할 수 있는 조건은 컨테이너마다 다르다. 같은 일을 하는 인터페이스를 갖추고 있어도, 그 일을 마친 뒤 남아 있는 상태까지 같지는 않다.
나는 이 차이를 컨테이너 교체의 작은 판단 기준으로 삼는다. 호출하는 함수만 보면 교체할 부분이 적어 보일 수 있다. 하지만 호출 뒤에도 쓰는 반복자가 있다면, 바뀐 컨테이너가 그 사용을 허용하는지까지 봐야 한다. 수정한 줄의 수만으로는 교체가 끝났는지 판단하기 어렵다.
그 조건을 좁혀 보면, 원소를 가리키는 반복자를 보관하고 컨테이너를 변경한 뒤 다시 사용하는 흐름이 남는다. 여기서 관찰할 것은 변경 연산이 있다는 사실과, 변경 전에 얻은 반복자를 변경 후에도 쓴다는 사실이다. 두 동작이 떨어져 있으면 각각은 평범해 보인다. 컨테이너를 바꿀 때 둘을 함께 읽어야 하는 이유가 여기에 있다.
두 동작을 함께 읽더라도 곧바로 문제가 있다고 단정할 수는 없다. 어떤 변경을 했는지, 해당 컨테이너가 그 변경에서 반복자의 유효성을 어떻게 정하는지가 더 필요하다. 내가 보류하는 것은 교체 자체가 아니라 교체가 안전하다는 판단이다. 같은 이름의 연산을 찾은 것만으로는 그 판단을 마칠 수 없다. 아직 남은 확인은 변경 전에 얻은 반복자가 다음 사용 지점에서도 유효한지다.
© 2026 다섯시사십분
•
Theme Moonwalk