스마트 포인터 - shared_ptr

Crat3 ㅣ 2023. 10. 11. 18:48

1. 필요성

클래스로 생성된 객체를 나중에 delete 해주지 않으면 그만큼의 메모리 누수(leak)가 발생하게 된다.

이를 해결하기 위해 특정 조건에서 포인터를 자동으로 할당 해제를 해주는 역할을 하는 것이 스마트 포인터의 역할이다.

 

게임에서 어떤 투사체가 날아가는 동안 투사체의 대상으로 지정된 객체가 delete될 때 자동으로 포인터를 해제해주는 역할을 통해 메모리 오염, use-after-free 문제를 예방할 수 있게 해준다.

 

 

2. shared_ptr

한 객체를 가리키는 포인터가 여러개 있을 때, 더 이상 어떤 포인터도 객체를 가리키지 않을 때 메모리 할당을 해제한다.

내부적으로 참조 카운터를 들고 있으며, 객체를 참조하는 포인터가 증가할 때 1씩 증가한다.

참조 카운터가 0이 되면 메모리를 해제한다.

 

 

3. 주의점

- shared_ptr를 사용하기로 했으면 모든 포인터는 shared_ptr로 지정하여 사용해야 한다.

- 자동으로 소멸되기 때문에, 생명 주기를 직접 관리하기 어렵다.

- 두 객체가 서로를 가리키고 있을 때에는 메모리가 해제되지 않는다.

'복습' 카테고리의 다른 글

스마트 포인터 - weak_ptr, unique_ptr  (0) 2023.10.13
오른값 참조 (r-value Reference)  (0) 2023.10.11
람다 표현식 (Lambda)  (0) 2023.10.11
함수 객체 ( functor ; 펑터 )  (0) 2023.10.06
함수 포인터  (0) 2023.10.06