C++ 스마트 포인터 입문

직접적인 메모리 관리는 C++ 개발자에게 강력한 통제권을 주지만, 동시에 누수와 댕글링 포인터라는 치명적인 위험을 안겨준다.

이러한 고통으로부터 해방시켜주는 스마트 포인터의 원리와 종류를 분석한다.

RAII: 안전한 자원 관리 철학

“자원 획득은 초기화와 동시에(RAII)”라는 원칙에 따라, 객체의 생명 주기에 메모리 해제 로직을 결합하여 실수를 원천 차단한다.

현대적 관리 도구 3종

  • unique_ptr: 객체의 독점적 소유권을 가진다.
    복사 불가능, 이동(Move)만 허용하여 가장 가볍고 안전하다.

  • shared_ptr: 공유 소유권.
    참조 횟수(Ref Count)를 관리하여 마지막 포인터 소멸 시 메모리를 자동 해제한다.

  • weak_ptr: 순환 참조 문제를 해결하기 위한 관찰 전용 포인터다.
    참조 횟수에는 영향을 주지 않는다.

사용 예시

auto uptr = std::make_unique<MyClass>(); // unique_ptr 권장
auto sptr = std::make_shared<MyClass>(); // shared_ptr 권장

P.S

스마트 포인터는 수동 메모리 관리의 부담을 제거하고 코드의 안정성을 비약적으로 높인다.

현대 C++에서는 특별한 이유가 없다면 생 포인터(Raw Pointer) 대신 스마트 포인터를 사용하는 것이 표준인 것 같다.

Author avatar

웨이호프

WordPress creator and blogger.

View all posts