C++메모리와 자원 관리

스마트 포인터와 RAII

자원 수명 관리를 객체 수명과 묶는 RAII와 `std::unique_ptr` 중심의 현대 C++ 패턴을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

cpp
auto user = std::make_unique<User>("Mina");
user->print();

설명

  • RAII는 자원을 객체 생성과 소멸에 연결해 자동 정리를 유도하는 C++ 핵심 철학입니다.
  • 스마트 포인터는 newdelete를 직접 다루지 않고 소유권 규칙을 명시하게 해 줍니다.
  • std::unique_ptr는 단독 소유, std::shared_ptr는 공유 소유가 필요할 때 사용합니다.
  • 파일 핸들, 뮤텍스, 메모리처럼 정리가 필요한 자원 전반에 RAII 사고방식이 적용됩니다.

짧은 예제

cpp
#include <iostream>
#include <memory>

class User {
public:
    explicit User(const char* name) : name(name) {}
    void print() const { std::cout << name << "\n"; }

private:
    const char* name;
};

int main() {
    auto user = std::make_unique<User>("Mina");
    user->print();
}

빠른 정리

항목설명
RAII자원 획득과 해제를 객체 수명에 연결
std::unique_ptr단독 소유 스마트 포인터
std::shared_ptr참조 횟수 기반 공유 소유
make_unique안전하고 간결한 생성 방식
자동 해제스코프를 벗어나면 소멸자에서 정리

주의할 점

공유 소유가 정말 필요한지 먼저 따져야 합니다. shared_ptr는 편하지만 소유권 구조를 흐리게 만들고 순환 참조 문제도 생길 수 있습니다.