예전 자유 게시판

[게임 프로그래머를 위한 자료구조와 알고리즘]에 대한 질문

이재훈 2007-07-02 18:07

이 책으로 재미있게 공부하고 있는 독자 중 한 사람입니다.

공부하던 중에 한가지 의심스러운 점이 있어 이렇게 질문 드립니다.

제9장에 있는 Aventure: Version One 데모 게임에 대한 질문입니다.
355-356쪽에서 SetNewMap 함수를 설명하는데, 356쪽에 있는 코드에 delete g_currentmap; 이 있습니다.
g_currentmap은 Map형 포인터이면서 Map 클래스를 상속받는 TileMap 인스턴스를 가리키고 있습니다.
그러므로 g_currentmap 이 가리키고 있는 메모리를 올바르게 해제하기 위해서는 TileMap 클래스의 소멸자를 호출해야 합니다.
그러기 위해서는 Map 클래스의 소멸자가 가상으로 선언되어 있어야 하는데, Map.h 에 있는 Map 클래스에는 소멸자가 선언되어 있지 않습니다.
제 생각에는 이 상태로는 다른 맵으로 전환할 때마다 메모리가 샐 것 같습니다.

이 데모에서는 맵을 하나만 사용해서 별로 신경을 쓰지 않은 것인지, 아니면 다른 방법으로 메모리를 잘 해제하고 있는 것인지, 그것도 아니면 제 생각이 틀린 것인지 잘 모르겠습니다.

확인하시고 가르쳐 주시면 감사하겠습니다.


p.s. 이 데모 게임은 책이 진행되면서 계속 업그레이드되기 때문에 혹시 뒤에 나오는 장에서 이 부분을 언급하지 않을까 하는 생각이 들긴 합니다. 하지만 이 책을 다 볼 때까지 이 궁금증의 해결을 미룬다면 문제 자체를 까먹을 것 같아 이렇게 질문 드립니다. 혹시 뒤에 있는 장에서 언급을 한다면 어디에서 언급하는지만 알려주시면 감사하겠습니다.


류광 2007-07-02 23:07


예 가상 소멸자가 되어야 합니다. 뒷부분에서 그 문제를 언급하지 않는 것으로 봐서 그냥 저자의 실수인 것 같습니다.