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;