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

ho kim님의 프로필 이미지

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

스마트 포인터

uses가 0이 될 때 객체 부분이 삭제가 어떻게 일어나나요?

24.08.01 23:02 작성

·

80

0

make shared로 shared_ptr를 만들게 되면

우리가 예제에서 만든 것처럼

우리가 포인터로 가르키는 객체가 RefCountingBlock을 상속해서

메모리에 할당 될 때 같이 된다는 이점있다고 이해했습니다

Refcount_obj2(_Type&&... Args) : Ref_count_base

를 예시를 드시며

21:11 에서 설명 해주셨습니다

 

만약 uses가 0이 되고 weak는 아직 1일 때

객체 부분은 구현에 따라 삭제 될 수도 있고

RefCountingBlock은 남아있게 된다고 말씀해주셨는데

RefCountingBlock을 상속해서 하나의 객체로 만들어진 상태에서

객체의 부모(countringBlock)을 남긴채로 자식(객체부분)만 메모리 해제를 할 수 있는건가요?

 

아니면 이게 불가능 하기 때문에 그냥 구현에 따라 다른건가요?

 

답변 2

0

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

2024. 08. 02. 19:04

메모리를 한 번에 할당했으면 한 번에 같이 해제하는 것이 맞지만,
다만 이미 할당된 메모리에 객체를 만들어서 생성자를 호출할 수 있으니
동일하게 소멸자를 호출하되 실제 메모리는 weak를 기다렸다 소멸시키지 않을까 싶네요.

ho kim님의 프로필 이미지
ho kim
질문자

2024. 08. 02. 23:07

답변감사합니다!

0

ho kim님의 프로필 이미지
ho kim
질문자

2024. 08. 02. 14:57

destroy 코드를 보다 든 생각인데

그냥 단순히 자식부분(객체) 소멸자만 호출해주고

부모부분(CountingBlock)의 소멸자는 weak가 0이 될 때

마저 호출해주면 될거같다는 생각이 들었네요..

ho kim님의 프로필 이미지

작성한 질문수

질문하기