언리얼 스마트 포인터

  • 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 스마트포인터는 내부의 가비지 컬렉터와 커스텀 메모리 풀 및 스레드 로컬 참조 관리를 통해서 엔진에 맞게 성능이 최적화되어 있음

+ Recent posts

let textNodes = document.querySelectorAll("div.tt_article_useless_p_margin.contents_style > *:not(figure):not(pre)"); textNodes.forEach(function(a) { a.innerHTML = a.innerHTML.replace(/`(.*?)`/g, '$1'); });