본문 바로가기

프로그래밍/언리얼

언리얼 스마트 포인터와 메모리 관리

스마트 포인터의 사용법은 일반 포인터와 거의 동일하다

 

일반 포인터는 객체에 접근가능한 주소를 보관하는 개념이라면

스마트 포인터는 객체의 소유권을 증명하는 개념이다

 

언리얼에서는 T로 시작하는 라이브러리로 제공한다

 

1. 유니크포인터(TUniquePtr)

 : 유일한 소유권을 보장한다. 공동 소유 불가

 

2. 공유포인터(TSharedPtr)

 : 공동 소유권을 주정할 수 있다

   내부적으로 레퍼런스 카운팅기법을 사용한다

   객체를 참조할 때마다 레퍼런스 카운트가 하나씩 올라가고, 해지하면 하나씩 내려간다

   레퍼런스카운트가 0이되면 자동으로 해당 객체를 소멸시킨다

   순환 참조(Circular Reference)가 발생할 수 있다

 

3. 약포인터(TWeakPtr)

 : 정보는 가지고 있지만, 소유권은 없는 형태이다

 

스마트 포인터 라이브러리는 일반 C++ 객체를 위한 라이브러리이기 때문에

언리얼 오브젝트에는 사용할 수 없다

 

언리얼 오브젝트는 언리얼 엔진 가상머신의

가비지 컬렉션(Garbage Collection)에 의해 자동으로 관리된다

 

언리얼 오브젝트가 GC에 의해 자동 관리되기 위해서는 선언에 반드시 UPROPERTY 매크로가 들어가야 한다

그럼 언리얼 엔진에 의해서 필요가 없어질 때 자동으로 회수된다

 

GC 시스템이 언리얼 오브젝트를 관리하는 방식은 공유 포인터와 거의 유사하지만, 

GC 시스템에 의해서 관리되기 때문에 메모리에서 해지되는 타이밍을 정확히 예측할 수 없다

 

가비지 컬렉션은 프로젝트 세팅에서 지정된 시간마다 언리얼 오브젝트를 감지해서 제거해준다

 

'프로그래밍 > 언리얼' 카테고리의 다른 글

언리얼 빌드시스템  (0) 2021.04.19
언리얼 프로젝트를 만들면 생성되는 것들  (0) 2021.04.12
UClass와 Reflection  (0) 2020.05.17
클래스 기본 객체(CDO)  (0) 2020.05.11
언리얼 오브젝트  (0) 2020.05.05