Unreal Engine
Unreal Engine Pointer Types
gbleem
2025. 1. 9. 18:13
참고 자료
https://unrealcommunity.wiki/pointer-types-m33pysxg
Pointer Types | Unreal Engine Community Wiki
Overview of UObject and "Smart" pointer types in Unreal
unrealcommunity.wiki
1. Managed Pointers
언리얼 엔진의 가비지 컬렉션 시스템으로 관리되는 포인터이다.
UObjects와 함께 작동하는 유일한 포인터 타입이다.
- Hard Object Pointer
- 소유자 클래스를 참조된 UObject의 holder나 dependent로 인식한다.
- 오브젝트에 대한 모든 포인터가 null이 되거나, 대상 오브젝트가 destroy 되거나, 모든 참조 포인터가 자동으로 null이 되어야만 UObject를 소멸시킨다.
- 쉽게 말해서, 이 포인터가 사라져야 가비지 컬렉션이 동작한다.
- IsValid를 통해 유효성을 체크한다.
- Weak Object Pointer
- C++의 weak_ptr과 유사한 동작을 한다.
- UObject에 대한 소유권을 가지고있지 않으며, UObject를 참조하는데 사용된다.
- 가비지 컬렉션 시스템이 인식하지 못하기 때문에, weak object pointer의 참조에 관계없이 가비지 컬렉션 된다.
- Soft Object Pointer
- weak object pointer와 동일하지만,
- 에셋 내의 객체에 대한 경로와 런타임에 해당 에셋을 로드하는 헬퍼 기능을 포함한다.
- soft pointer가 어떠한 instance를 pointing 할때 메모리 주소값과 asset의 주소를 저장하므로
- runtime에 에셋을 불러올 때 사용할 수 있다고 한다.
//hard
UPROPERTY()
UObject* Pointer = nullptr; //UE4
TObjectPtr<MyUObjectClass> MyObject; //UE5
//weak
TWeakObjectPtr<UObject> Pointer;
//soft
TSoftObjectPtr<UObject> Pointer;
2. Unmanaged Pointers
언리얼 엔진의 가비지 컬렉션 시스템이 아닌 참조 카운팅을 통해 동작한다.
UObject와 호환되지 않는다.
C++의 포인터 종류들과 같은 동작을한다.
- Unique Pointer
- 하나의 객체만 소유하고, 재할당되거나 null이 되면 대상 객체를 삭제한다.
- shared pointer와 같은 객체를 참조할 수 없다.
- Shared Pointer
- 참조 카운팅으로 동작한다.
- Weak Pointer
- IsValid를 통해 유효성 체크를 해야한다.
- Raw Pointer
- hard object pointer에서 UPROPERTY() 를 쓰지 않은 것을 말한다.
- 항상 안정성을 체크하는 부분이 필요하다.
- IsValid를 raw pointer에는 쓰면 안된다.
TUniquePtr<FObject> Pointer;
TSharedPtr<FObject> Pointer;
TWeakPtr<FObject> Pointer;
FObject* Pointer = nullptr;