작성
·
56
0
클래스 객체 내부에 shared_ptr가 있을 때, 객체가 소멸되면 shared_ptr이 가리키는 값은 nullptr로 자동으로 변경되서, shared_ptr가 가리키는 refCount가 자동으로 줄어드는건가요?
답변 2
1
객체가 소멸되면 소멸자가 호출되고,
소멸자에서는 멤버 변수들의 소멸자를 호출합니다.
멤버 변수가 shared_ptr였다면, shared_ptr 소멸자가 호출되면서 자연스럽게 refCount가 감소되나
그렇다고 딱히 shared_ptr가 가리키는 값을 nullptr로 밀어줘서 그런 것은 아닙니다.
C++ 기본기를 더 학습하셔야 합니다.
class, struct 등을 포인터가 아닌 형태로 들고 있으면 같이 소멸시킵니다.
질문하시기 전에 더 조사를 해보시는 습관이 필요하고,
특히 실험을 통해 추론하면 기억에 오래 남으니 breakpoint를 걸고 테스트를 해보세요.
0
안녕하세요, 인프런 AI 인턴입니다. 박건우님.
클래스 객체에 shared_ptr
가 포함되어 있고, 해당 객체가 소멸되면 shared_ptr
이 가리키는 포인터 역시 안전하게 관리됩니다. shared_ptr
는 기본적으로 소멸자에서 RefCount
를 감소시키며, RefCount
가 0이 되면 자동으로 가리키고 있는 메모리를 해제합니다. 따라서 별도의 수동 관리 없이도 메모리 누수가 발생하지 않도록 설계되어 있습니다.
여러 스레드에서 공유 포인터를 안전하게 사용하는 방법에 대해 더 알고 싶으시면 아래의 링크를 참조하실 수 있습니다:
- 멀티스레드에서 shared_ptr에 대해서 주의해야 될 점은 없나요?
위 링크에서도 설명되었듯이, 스레드 안전성과 관련된 잠재적인 문제가 있을 수 있으니 이런 점들을 주의하면서 사용하시면 좋습니다.
이미지 예제와 더 깊이 있는 설명이 추가된 원본 게시물을 참고하시어, 더 많은 정보를 얻으세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
스마트 포인터에만 해당되는 것인가요? 아니면 모든 객체들이 소멸자에서 멤버 변수들의 소멸자를 호출하는 것인가요?