인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

박건우님의 프로필 이미지

작성한 질문수

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

스마트 포인터

스마트 포인터부분에서 궁금한게 있습니다.

작성

·

56

0

클래스 객체 내부에 shared_ptr가 있을 때, 객체가 소멸되면 shared_ptr이 가리키는 값은 nullptr로 자동으로 변경되서, shared_ptr가 가리키는 refCount가 자동으로 줄어드는건가요?

답변 2

1

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

객체가 소멸되면 소멸자가 호출되고,
소멸자에서는 멤버 변수들의 소멸자를 호출합니다.
멤버 변수가 shared_ptr였다면, shared_ptr 소멸자가 호출되면서 자연스럽게 refCount가 감소되나
그렇다고 딱히 shared_ptr가 가리키는 값을 nullptr로 밀어줘서 그런 것은 아닙니다.

박건우님의 프로필 이미지
박건우
질문자

스마트 포인터에만 해당되는 것인가요? 아니면 모든 객체들이 소멸자에서 멤버 변수들의 소멸자를 호출하는 것인가요?

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

C++ 기본기를 더 학습하셔야 합니다.
class, struct 등을 포인터가 아닌 형태로 들고 있으면 같이 소멸시킵니다.
질문하시기 전에 더 조사를 해보시는 습관이 필요하고,
특히 실험을 통해 추론하면 기억에 오래 남으니 breakpoint를 걸고 테스트를 해보세요.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 박건우님.

클래스 객체에 shared_ptr가 포함되어 있고, 해당 객체가 소멸되면 shared_ptr이 가리키는 포인터 역시 안전하게 관리됩니다. shared_ptr는 기본적으로 소멸자에서 RefCount를 감소시키며, RefCount가 0이 되면 자동으로 가리키고 있는 메모리를 해제합니다. 따라서 별도의 수동 관리 없이도 메모리 누수가 발생하지 않도록 설계되어 있습니다.

여러 스레드에서 공유 포인터를 안전하게 사용하는 방법에 대해 더 알고 싶으시면 아래의 링크를 참조하실 수 있습니다:
- 멀티스레드에서 shared_ptr에 대해서 주의해야 될 점은 없나요?

위 링크에서도 설명되었듯이, 스레드 안전성과 관련된 잠재적인 문제가 있을 수 있으니 이런 점들을 주의하면서 사용하시면 좋습니다.

이미지 예제와 더 깊이 있는 설명이 추가된 원본 게시물을 참고하시어, 더 많은 정보를 얻으세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.