Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 델리게이트
- 약참조
- 언리얼가비지컬렉터
- 선택정렬
- 프로그래머스
- UML관련
- UE_LOG
- 구조적 바인딩
- 애셋로드
- 정렬
- 알고리즘
- 데이터애셋
- 스마트포인터
- unorder_map
- moreeffectiveC++
- 자료구조
- 람다
- makeweakobjectptr
- BFS
- tweakobjectptr
- dataasset
- 비동기호출방법
- enumasByue
- 크리티컬섹션
- 강참조
- C++최적화
- map
- 정렬알고리즘
- C++
- stl
Archives
- Today
- Total
기억을 위한 기록들
[UE] UObject 객체에 대해 참조 할때, TWeakObjectPtr<T> 템플릿 클래스 말고도, MakeWeakObjectPtr 함수가 있다. 본문
UnrealEngine
[UE] UObject 객체에 대해 참조 할때, TWeakObjectPtr<T> 템플릿 클래스 말고도, MakeWeakObjectPtr 함수가 있다.
에드윈H 2025. 6. 8. 16:35언리얼엔진에서 UObject 객체들에 참조하려고 할 때, 유효성 검사하더라도 포인터만 남아서 문제가 생길 때가 있다.
UObject* CachedObject = GetSomeObject(); // 이 시점엔 유효
// ...
if (CachedObject) // 이게 true라도 실제 메모리는 이미 파괴되었을 수 있음
{
CachedObject->DoSomething(); // 크래시 가능
}
혹은
FTimerDelegate TimerDel;
TimerDel.BindLambda([=]()
{
MyObject->DoSomething(); // MyObject는 이미 GC에 의해 삭제됐을 수 있음
});
이럴때의 TWeakObjectPtr<T> 템플릿으로 감싸서 IsValid 검사를 하며 사용할 수 있다.
객체가 유효할 때만 접근이 가능하고, GC가 객체를 수거하면 자동으로 무효화되기 때문에 소유하지 않는 참조를 안전하게 구현할 수 있습니다.
하지만 TWeakObjectPtr은 템플릿 타입이기 때문에 직접 만들 때 종종 실수할 수 있습니다. 이를 방지하기 위해 MakeWeakObjectPtr(Object) 함수를 제공하여 객체 타입을 추론하고, 간결하고 안전하게 TWeakObjectPtr을 생성할 수 있게 해 줍니다.
UObject* SomeUObject = GetSomeUObject();
// 직접 생성할 경우
TWeakObjectPtr<UObject> WeakA(SomeUObject);
// MakeWeakObjectPtr 사용
auto WeakB = MakeWeakObjectPtr(SomeUObject);
여기서 중요한 점은 템플릿 타입을 명시하지 않아도 MakeWeakObjectPtr이 타입을 자동 추론해 준다는 것이다.
특히, 커스텀 객체 타입에서 실수하기 쉬운 부분을 줄여준다.
if (WeakB.IsValid())
{
WeakB->DoSomething();
}
또한, TWeakObjectPtr은 다음처럼 유효성 검사도 쉽게 할 수 있습니다:
결국, MakeWeakObjectPtr은 단순한 함수 이상으로 큰 차이 없을 수 있겠지만 코드의 안정성과 가독성을 동시에 챙길 수 있는 실용적인 습관 중 하나가 될 수도 있다고 본다.
'UnrealEngine' 카테고리의 다른 글
[UE] 월드 내 액터 탐색 할 때에는 TActorIterator 라는 클래스 템플릿이 있다. (1) | 2025.07.01 |
---|---|
[UE] 블루프린트에서 비동기방식을 다루고 싶다면 UBlueprintAsyncActionBase 클래스를 사용하자. (0) | 2025.05.31 |
[UE] 모바일 App Name다국어 대응: Android와 iOS의 Info 및 문자열 현지화(localization) 방법 (0) | 2025.05.15 |
[UE] 안드로이드 라이브러리와 UPL에 관하여 (3) | 2024.09.18 |
[Enhanced Input System] Lyra 프로젝트의 향상된 입력시스템 프레임워크 살펴보기 (2) | 2024.05.27 |