C++

스마트 포인터

햄시나 2024. 10. 22. 12:22

스마트 포인터가 등장한 배경은 어쩌면 당연한 것이다.

코드가 복잡해질수록 이 포인터 변수가 하나의 객체를 가르키는지, 배열을 가르키는지 알기 힘들게 되고 등등...

메모리해제에 대한 대표적인 두가지의 문제를 얘기해보겠다.

1. 위에 예시를 든 것처럼 delete를 하면 되는지, delete[] 를 해야하는지에 대한 문제다.

2. 중복해제가 일어나기도 한다.

// double free 버그 //
        Data* data = new Data();
        Date* data2 = data;
        delete data;          // data 의 입장 : 사용 다 했으니 소멸시켜야지.
        delete data2;         // data2 의 입장 : 나도 사용 다 했으니 소멸시켜야지

스마트 포인터의 핵심아이디어는 RAII 다.

      - Resource Acquisition Is Initialization  
      - 자원의 획득은 초기화다 

생성자에서 자원을 얻도록 동적할당하고, 소멸자에서 바로 해제를 시키는 방식이다.