해결된 질문
작성
·
641
0
안녕하세요 루키스님 프로젝트에 스마트포인터를 사용해보려고하는데 제가 생각한 설계가 맞는지 궁금합니다
C++ 서버 강의에서 스마트포인터에 대한 설명을 들었는데 Shared_ptr은 상호참조문제가 있고 이를 해결하기 위해 Weak_ptr을 사용한다고 설명해주셨는데
Weak_ptr이나 Shared_ptr을 잘 사용해서 상호참조로 인한 문제를 잘 해결하면 좋겠지만 프로젝트 크기가 커지다보면 상호참조 관계를 명확하게 파악하기 어렵다는 단점이 존재할수 있다고 생각합니다
그래서 제가 생각한 방법은 어떤 객체에서 다른 객체의 생명주기를 자신이 직접 관장한다면 shared_ptr 그렇지않다면 weak_ptr로 멤버를 두고 관리하고 shared_ptr인 멤버는 항상 weak_ptr로 반환하도록 하는게 좋지 않나라는 생각입니다 강의에서 설명해주신 Knight를 예로들어보면
Knight끼리 서로를 타겟으로 지정할수 있다고 할때
Class Knight
private :
weak_ptr<Knight*> target
shared_ptr<Weaphon*> weaphon
위 코드를 예로들면 타겟 가능한 기사객체는 자기 자신이 생명주기를 관장하는 멤버가 아니기떄문에 weak로 두고 기사가 들고있는 무기의 경우는 기사가 죽을때 같이 사라지는게 자연스럽다고 볼수 있기 때문에 shared로 둬서 knight가 죽을떄 자연스럽게 같이 사라지도록 설계하고
만약 대장간 같은데서 강화를 위해서 weaphon을 참조해야한다면 Knight에서 weak_ptr<Weaphon*> GetWeaphon() 이런식으로 설계해서 상호참조를 예방할수 있도록 설계하는것이 어떻겠냐는 생각을 개인적으로 해봤는데 이에대해서 어떻게 생각하시는지 궁금합니다