2008.07.18 08:53 책 정리/Effective STL
2008/07/18 - [IT 전뇌실/Effective STL 초판] -
항목 19 : 상등 관계(equality)와 동등 관계(equivalence)의 차이를 파악하자

에서 상등 관계와 동등관계를 정리해 둔것이 있었다. 연관 컨테이너(Associative Containers)에 값을 넣을 때는 그 연관 컨테이너가 어떤 연관순서로 정렬이 되는지 동등관계의 비교타입을 정의해 두어야 한다.

하지만 포인터를 넣는 연관컨테이너는 어떻게 될까?
이 경우에 포인터의 비교타입을 정해두지 않는 다면, 포인터의 동등(equibelence)관계로 정렬이 되기 때문에 원하는 정렬을 하지 못한다. 실험 코드를 준비 했다, 메모리 누수는 .. 알아서 대처 하도록


그렇다면 어떻게 해야 하는가? 역시 코드를 준비 했다. 역시 메모리 누수는 알아서 대처하도록

여기서 눈여겨 볼것은 다름 아닌, 함수를 넣는것이 아닌 객체를 넣는다는 것에 있다. 왜냐하면 연과컨테이너가 비교 타입으로 원하는것은 함수의 포인터가 아닌, 타입 그 자체이기 때문이다.(사실 타입을 원한다 했을 때는 잘 이해가 안되는데, 나 같은 경우 타입은 특정 객체를 뜻한다라고 매치시면 잘 이해가 된다.)


이렇게 하면, 원하는 순서대로 정렬이 될 것이다. 이런 포인터형을 담을때 이런 점을 주의하면 큰 문제는 없다.(메모리 해체는.. 스스로 하시길;)


여담으로
1. 템플릿을 만들어 포인터를 비교하는게 좋겠다고 책에 나와있지만, 이런 요령이 있다는 것이다. 포인터를 이렇게 할 경우, 사용자 정의 객체라면, operator < 를 반드시 정의해 두어야 한다.(책에 빠져 있길래...)
2. 책에서는 smart_ptr을 넣어, 메모리 해체에 대한 .. 부담을 덜라고 나와있다.


관련링크
http://blog.empas.com/electr/18722425


신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요