피드로 돌아가기
Beyond new and delete: to Weak Pointer
Dev.toDev.to
Backend

Cyclic Reference 제거를 통한 메모리 누수 원천 차단 설계

Beyond new and delete: to Weak Pointer

Rui-Tech2026년 4월 20일5intermediate

Context

shared_ptr 기반의 참조 횟수 관리 체계에서 발생하는 Cyclic Reference 문제 분석. 상호 참조 시 Reference Count가 0으로 떨어지지 않아 객체가 파괴되지 않는 메모리 누수 현상 발생.

Technical Solution

  • 소유권 분리를 통한 weak_ptr 도입으로 Reference Count 증가 없는 관찰자 구조 설계
  • .lock() 메서드를 활용한 원자적(Atomic) 상태 확인 및 임시 shared_ptr 획득으로 Thread-safe한 접근 보장
  • Parent-Child 관계에서 Child는 shared_ptr로 소유하고 Parent는 weak_ptr로 참조하는 Back-pointer 구조 적용
  • Event Observer 패턴에서 비소유 참조를 통해 객체 생명주기에 영향을 주지 않는 알림 체계 구축
  • Cache 시스템에 weak_ptr를 적용하여 외부 참조가 사라진 객체의 자동 메모리 해제 유도
  • .get()을 통한 Raw Pointer 사용의 위험성을 제거하고 weak_ptr 기반의 안전한 참조 모델로 전환

1. 상호 참조 가능성이 있는 클래스 설계 시 weak_ptr 도입 검토

2. 캐시 구현 시 객체의 생명주기를 강제하지 않기 위해 weak_ptr 기반 저장소 사용

3. Raw Pointer를 통한 객체 접근 대신 .lock()을 통한 유효성 검증 로직 적용

4. Tree 구조의 Back-pointer 설정 시 반드시 weak_ptr 사용 여부 확인

원문 읽기