상세 컨텐츠

본문 제목

언리얼 엔진의 포인터

Study/UNREAL

by J2on 2024. 2. 8. 02:42

본문

 

 

언리얼 엔진의 포인터 | Notion

언리얼 엔진에서 사용하는 Pointer에 대해 알아보자

j2on.notion.site

 

언리얼 엔진에서 사용하는 Pointer에 대해 알아보자

 

크게 두 가지로 분류할 수 있다.

Managed Pointer ( 관리되는 포인터 )

 

당연히 Garbage Collector에 의해 관리되는 포인터를 뜻한다.

 

여기에도 두 가지가 있는데, 강력 / 약한 이렇게 분류된다.

 

 

 

1. Hard Object Pointer (강함)

UObject에 대해 ‘hold’ 혹은 ‘dependent’

 

즉, 점유하고 있는 상태를 말한다.

 

이런 Hard Object Pointer가 모두 사라져야 GC가 UObject를 할당 해제한다.

⇒ 얘가 잡고있으면 GC가 삭제하지 않음.

 

 

 

 

 

UPROPERTY() UObject* Pointer = nullptr;

IsValid(Pointer) // 유효성 판별

 

 

 

2. Weak Object Pointer (약함)

얘는 UObject를 소유하지 않음.

 

그래서 GC가 얘가 있는 것을 모른다.

 

그래서 Weak Pointer가 Object를 pointing하고 있어도, GC가 삭제할 수 있다.

 

그렇기 때문에 weakPointer로 선언한 pointer에 접근할 때에는 항상 유효성 판별이 필요

 

 

 

 

 

TWeakObjectPtr<UObject> Pointer;

IsValid(Pointer) // 유효성 판별

 

 

 

3. Soft Object Pointer

Weak Object Pointer 처럼 얘도 소유하지 않는 약한 pointing을 한다.

TSoftObjectPtr<UObject> Pointer;

그런데 Weak Pointer와 차이점이 무엇이냐 하면,

 

얘는 어떤 instance를 pointing할 때, 메모리 주소 값 & asset의 주소 를 저장한다.

 

이것이 무슨 말이냐.

해당 UObject가 사용하는 Asset의 주소를 저장한다는 것.

 

 

때문에 Runtime에 에셋을 불러오는 것에 도움을 준다.

 

TSoftObjectPtr<UTexture2D> ItemImage;
ItemImage = "/Game/Textures/ItemTexture.ItemTexture";

ItemImage.LoadSynchronous(); // 이미지 Texture를 로드

 

 

자 그러면 이제 관리되지 않는 포인터를 함 보자.

 

 

Unmanaged Pointers

 

기본적으로 C++이 제공하는 SmartPointer랑 거의 유사하다고 생각하면 될 것 같다.

 

reflection에 알리는 것이 아니라 자체적으로 동작하는 것.

 

다만, UObject를 사용할 수 없다. 대신 FObject를 사용한다.

 

 

1. Unique Pointer

 

 

 

 

TUniquePtr<FObject> Pointer;

일반적인 Unique Pointer의 역할을 한다.

 

한 시점에 오직 하나의 Unique Pointer만 객체를 소유

 

더 이상 객체를 소유하지 않거나, 다른 Unique Pointer가 객체를 소유하면 사라짐

 

 

2. Shared Pointer

 

 

 

 

TSharedPtr<FObject> Pointer;

객체를 가리키는 Pointer가 0이 되면 사라짐.

 

 

3. Weak Pointer

 

 

 

 

TWeakPtr<FObject> Pointer;

객체를 소유하지 않는 포인터

 

4. Raw Pointer

 

 

 

 

FObject* Pointer = nullptr;

그냥 원시적인 형태의 포인터 방식

 

여기에 UPROPERTY 매크로만 붙이면 Hard Object Pointer가 된다.

 

 

참조

https://unrealcommunity.wiki/pointer-types-m33pysxg

 

Pointer Types | Unreal Engine Community Wiki

Overview of UObject and "Smart" pointer types in Unreal

unrealcommunity.wiki

 

관련글 더보기

댓글 영역