인프런 커뮤니티 질문&답변

김도형님의 프로필 이미지
김도형

작성한 질문수

[게임 프로그래머 도약반] DirectX11 입문

리소스를 관리하는데 shared_ptr를 써야되는가 RawPointer를 써야되는가 weak_ptr를 써야되는가?

작성

·

202

0

한 GameObject 내부에서 선언되는 Parent, Children와 한 MeshRenderer 내부에서 선언되는 Mesh, Material 등등과 같은 리소스들은 각각 Scene과 ResourceManager내부에서 관리(생성, 파괴)되기 때문에 이런 관리해주는 클래스 에서만 shared_ptr로 생성해주고 다른 클래스 에서는 weak_ptr로 전해받았었습니다.

그런데 문뜩 든 생각이 결국 다른 클래스에서 이런 객체들을 사용하기 위해 프레임마다 weak_ptr::lock을 사용하여 shared_ptr로 만들어서 사용할텐데 이러면 비용 부담이 너무 많이되어 배보다 배꼽이 큰 상황이 발생하는 것 같다는 생각이 들었고 이럴바엔 그냥 왠만한 클래스에선 리소스를 shared_ptr로 선언하고 사용한 후 관리해주는 클래스(Scene, ResourceManager)들에서 삭제될때 여기서도 동시에 shared_ptr를 지워버리는식으로 관리를 해주는게 더 좋을 것 같다고 생각을했는데 과연 옳은 생각인 건가요?

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 실제로 프로젝트에 따라 weak_ptr을 아예 안 쓰는 경우도 있습니다.

김도형님의 프로필 이미지
김도형
질문자

그렇다면 혹시 질문이 있는데 관리자 클래스쪽에서 해제시킬때 관련된 모든 클래스들을 차례차례 다 방문하면서 shared_ptr를 해체시키고 마지막으로 관리자 클래스에 있는 shared_ptr를 해제해주는 노가다 방식말고 관리자 클래스에서 shared_ptr가 해제될때 이 share_ptr를 가지고 있는 모든 클래스에서 알아서 이 shared_ptr를 해제해주는 방식이 없을까요?
그리고 만약 방식이 없는데도 이러한 방식으로 디자인을 만들고 싶다면 관리자쪽에서만 shared_ptr을 쓰고 다른 클래스 쪽에선 weak_ptr을 써야되는 거겠죠?

김도형님의 프로필 이미지
김도형

작성한 질문수

질문하기