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
- 자원의 획득은 초기화다
생성자에서 자원을 얻도록 동적할당하고, 소멸자에서 바로 해제를 시키는 방식이다.