스마트 포인터의 사용법은 일반 포인터와 거의 동일하다
일반 포인터는 객체에 접근가능한 주소를 보관하는 개념이라면
스마트 포인터는 객체의 소유권을 증명하는 개념이다
언리얼에서는 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 |