언리얼 스마트 포인터
cpp 스마트 포인터에서 소문자->대문자, 언더바->붙여쓰기 형태가 다를 뿐 생성과 사용 유사
use_count()
로 확인 대신,GetSharedReferenceCount()
로 확인공유 포인터 예시
#include "CoreMinimal.h" class MyClass { public: MyClass(int val) : Value(val) {} int Value; }; void Example() { // TSharedPtr 사용 TSharedPtr<MyClass> shared1 = MakeShared<MyClass>(42); TSharedPtr<MyClass> shared2 = shared1; // 참조 공유 UE_LOG(LogTemp, Warning, TEXT("shared1 Value: %d"), shared1->Value); UE_LOG(LogTemp, Warning, TEXT("shared2 Value: %d"), shared2->Value); UE_LOG(LogTemp, Warning, TEXT("Reference count: %d"), shared1.GetSharedReferenceCount()); // 참조 카운터 출력 }
왜 언리얼 스마트 포인터 사용?
- 기존 cpp의 스마트 포인터는 멀티스레드에서 성능 저하
- shared_ptr 내부에서 기본적인 lock 방식을 사용하기에
- 기존 cpp의 스마트 포인터는 객체의 잦은 소멸과 생성에서 성능 최적화X
- UE 스마트포인터는 내부의 가비지 컬렉터와 커스텀 메모리 풀 및 스레드 로컬 참조 관리를 통해서 엔진에 맞게 성능이 최적화되어 있음