-
[C++] 스마트 포인터 (부제 : 가비지 컬렉터와 스마트 포인터의 차이점)ABOUT COMPUTER/학습 STUDY 2021. 10. 12. 19:59
스마트 포인터란?
#include <memory> 헤더로 사용이 가능하다.
C++ 프로그램에서 new 키워드를 사용하면, delete로 해제할 수 있다.
C++은 메모리 릭으로부터 안전하기 위해 스마트 포인터를 사용할 수 있는데, 포인터처럼 동작하는 클래스로 사용이 끝난 메모리를 자동으로 해제해주는 기능을 한다.
스마트 포인터의 종류
unique_ptr
하나의 스마트포인터만이 특정 객체를 소유할 수 있도록 객체에 소유권 개념을 도입
소유권을 이전할 수 있지만 스마트포인터가 객체의 소유권을 가지고 있을 때에만 소멸자가 해당 객체를 삭제할 수 있게 함
shared_ptr
하나의 특정 객체를 참조하는 스마트 포인터가 총 몇개인지 확인하고 shared_ptr의 수명이 다하고, 참조 횟수가 0이 되면 delete 키워드를 이용하여 해제된다. 스마트 포인터의 개수를 참조 횟수(ref count)라고 한다.
weak_ptr
shared_ptr 인스턴스가 소유하는 객체에 대한 접근을 제공하지만, 소유자의 수는 포함되지 않는 스마트 포인터로 shared_ptr에서 순환 참조가 일어나는 것을 제거하기 위해 사용한다.
사용 방법
new 키워드를 사용하여 일반 포인터가 메모리를 가리키도록 초기화하고 기본 포인터를 스마트포인터에 대입하여 사용한다. 이렇게 정의된 스마트포인터가 수명이 다하면 소멸자를 통하여 자동으로 메모리 해제가 진행된다.
가비지 컬렉터와 스마트 포인터의 다른 점은?
가비지컬렉터의 경우 메모리를 할당한 변수들을 전부 돌면서 확인하는 꽤 큰 비용의 과정을 거치지만 C++의 스마트포인터는 내가 지정한 변수들에 대해서만 검사를 진행할 수 있다는 큰 강점을 가지고 있다고 생각해.
일반 포인터와 스마트 포인터의 다른 점은?
일반 포인터는 객체에 접근 가능한 주소를 보관하는 개념이지만 스마트 포인터의 경우 객체의 소유권을 증명하는 개념
언리얼에서 사용했을 때 장점?
메모리 누수 방지, 스마트 포인터들은 더 이상 공유된 레퍼런스가 없으면 오브젝트 자동 소멸
명확한 의도, 오브젝트의 소유자를 쉽게 분별할 수 있다
댕글링 포인터 방지, 삭제된 오브젝트를 참조하는 댕글링 포인터를 방지한다.
내일 면접 잘보자! 화이팅 :)
'ABOUT COMPUTER > 학습 STUDY' 카테고리의 다른 글
[C++] 캐스트 연산자 (static_cast, dynamic_cast, ...) (0) 2021.10.12 [Deep Learning] 자전거 수요 예측하기 - kaggle (0) 2021.04.08 [이것이 취업을 위한 코딩 테스트다 with 파이썬] PART 03 (2) 2021.01.26 What is RPA? (RPA란?) 초심자를 위한 RPA tool에 대한 장단점 비교 (10) 2020.07.10