728x90
Unreal Engine 5에서 객체를 참조하는 방법에는 여러 가지가 있습니다.
그중에서도 자주 사용되는 스마트 포인터 종류인 TWeakObjectPtr, TSharedPtr, TObjectPtr에 대해 알아보겠습니다.
TWeakObjectPtr
- 목적: 객체에 대한 약한 참조를 제공하여, 객체의 생명주기를 안전하게 관리합니다.
- 기능:
- 객체에 대한 포인터를 저장하지만, 참조 카운트를 증가시키지 않습니다.
- 순환 참조를 방지하고 메모리 누수를 줄여줍니다.
- 참조하는 객체가 삭제된 경우 nullptr을 반환합니다.
- 사용 시기:
- 객체 소유권을 갖지 않고 단순히 참조만 할 때
- 순환 참조를 피해야 할 때
- 객체의 존재를 항상 보장할 필요가 없을 때
TSharedPtr
- 목적: 객체에 대한 공유 소유권을 제공하여, 여러 곳에서 객체를 안전하게 참조하고 관리합니다.
- 기능:
- 객체에 대한 포인터를 저장하고 참조 카운트를 자동으로 관리합니다.
- 새로운 TSharedPtr이 생성될 때 참조 카운트가 증가하고, 소멸될 때 감소합니다.
- 참조 카운트가 0이 되면 객체를 자동으로 삭제합니다.
- 사용 시기:
- 여러 곳에서 객체를 공유해야 할 때
- 객체의 생명주기를 길게 유지해야 할 때
- 객체가 실수로 삭제되는 것을 방지해야 할 때
TObjectPtr
- 목적: 일반적인 C++ 포인터와 유사하게 객체에 대한 직접적인 포인터를 제공합니다.
- 기능:
- 참조 카운트나 소유권 관리 기능이 없습니다.
- 메모리 관리를 개발자가 직접 해야 합니다.
- 사용 시기:
- 성능이 중요한 부분에서 참조 카운트 오버헤드를 줄이고 싶을 때
- 객체의 생명주기를 개발자가 완벽하게 제어해야 할 때
- 레거시 코드나 특정한 상황에서 TSharedPtr이나 TWeakObjectPtr이 적절하지 않을 때
각 스마트 포인터의 주요 차이점
기능 | TWeakObjectPtr | TSharedPtr | TObjectPtr |
참조 카운트 | 없음 | 있음 | 없음 |
소유권 | 없음 | 공유 | 없음 |
안전성 | 순환 참조 방지 | 객체 안전하게 삭제 | 메모리 관리 필요 |
성능 | 일반적으로 TSharedPtr보다 빠름 | 참조 카운트 관리 오버헤드 | 가장 빠르지만 개발자 책임 |
어떤 스마트 포인터를 사용해야 할까요?
- TWeakObjectPtr: 객체 소유권 없이 약한 참조가 필요할 때
- TSharedPtr: 여러 곳에서 객체를 공유하고 안전하게 관리해야 할 때
- TObjectPtr: 메모리 관리를 직접 제어하고 성능이 중요할 때
728x90
'프로그래밍' 카테고리의 다른 글
UHierarchicalInstancedStaticMeshComponent 에서 인스턴스 제거 시 인덱스 변화 (4) | 2024.10.18 |
---|---|
IsValidLowLevel과 IsValid 함수 (0) | 2024.10.02 |
"DOREPLIFETIME_CONDITION"를 사용해서 생성 시 한번만 동기화 하기 (1) | 2024.09.25 |
EPhysicalSurface를 FString으로 변환하는 방법 (1) | 2024.09.23 |
UE5에서 GetLabelName 함수를 사용하지 않는 이유 (0) | 2024.09.22 |