피드로 돌아가기
Beyond New and Delete: Engineering Approach with gsl::owner, std::span and clang-tidy
Dev.toDev.to
Backend

GSL과 Static Analysis 기반의 Raw Pointer 제거 및 Ownership 명시화 전략

Beyond New and Delete: Engineering Approach with gsl::owner, std::span and clang-tidy

Rui-Tech2026년 4월 26일6intermediate

Context

Raw Pointer 사용으로 인한 메모리 누수 및 소유권 모호성이라는 고전적 C++ 설계 한계 직면. 단순한 스마트 포인터 교체만으로는 복잡한 레거시 시스템의 안정성을 보장하기 어려운 상황 분석.

Technical Solution

  • GSL(Guidelines Support Library)의 gsl::owner 및 gsl::not_null 도입을 통한 메모리 소유권의 명시적 정의
  • clang-tidy의 cppcoreguidelines-owning-memory 체크를 활용한 소유권 위반 및 잘못된 delete 호출의 정적 탐지
  • std::span 도입을 통해 배열 포인터와 크기 인자를 대체하여 메모리 뷰의 안전성 확보
  • Leaf Module부터 시작하는 점진적 리팩토링 전략으로 시스템 사이드 이펙트 최소화
  • modernize-make-unique 등 자동화 툴을 통한 휴먼 에러 방지 및 Modern C++ 표준으로의 강제 전환

1. gsl::owner로 소유권 포인터를 명시하고 clang-tidy로 검증했는가?

2. Non-owning 포인터를 std::span이나 Reference로 대체 가능한지 검토했는가?

3. Leaf Module부터 상위 모듈 순으로 점진적 리팩토링 계획을 수립했는가?

4. make_unique/make_shared를 통해 raw new 사용을 완전히 제거했는가?

원문 읽기