C++에서 스마트 포인터를 공부하다 보면 std::unique_ptr 다음으로 std::shared_ptr을 만나게 됩니다.이름만 보면 여러 곳에서 함께 쓰기 좋은 포인터처럼 보입니다.하지만 shared_ptr은 단순히 “복사 가능한 스마트 포인터”가 아닙니다.shared_ptr은 하나의 객체를 여러 소유자가 함께 책임지는 구조를 표현합니다. shared_ptr은 공유 소유권을 표현하는 도구이고, weak_ptr은 그 소유권에 참여하지 않고 객체를 관찰하는 도구입니다. 이번 글에서는 std::shared_ptr이 어떤 방식으로 객체 수명을 관리하는지, 왜 순환 참조가 문제가 되는지, 그리고 std::weak_ptr을 언제 사용해야 하는지 코드 예제로 정리해보겠습니다. 1. shared_ptr은 무엇인가?..