TSharedPtr, TUniquePtr, TWeakPtr ve TWeakObjectPtr arasındaki farklar nelerdir?

Cevap

Unreal'da iki ayrı bellek dünyası vardır: UObject'ler GC ile, düz C++ nesneleri ise akıllı pointer'larla yönetilir. TSharedPtr ailesi UObject için kullanılmaz.

TipSahiplikNe içinSTL karşılığı
TUniquePtrTekil sahipDüz C++ nesnesi, tek sahipstd::unique_ptr
TSharedPtrPaylaşımlı, ref countDüz C++ nesnesi, çok sahipstd::shared_ptr
TSharedRefPaylaşımlı, null olamazNull olmaması garanti nesneyok
TWeakPtrSahip değilTSharedPtr döngüsünü kırmakstd::weak_ptr
TObjectPtrGC referansı (UPROPERTY ile)UObject üye alanıyok
TWeakObjectPtrSahip değil, GC'yi engellemezUObject'i gözlemlemekyok
// Düz C++ sınıfı
TSharedPtr<FPathCache> Cache = MakeShared<FPathCache>();
TWeakPtr<FPathCache> WeakCache = Cache;
if (TSharedPtr<FPathCache> Pinned = WeakCache.Pin()) { Pinned->Clear(); }

// UObject gözlemleme: hedef öldüyse otomatik geçersizleşir
TWeakObjectPtr<AActor> Target;
if (Target.IsValid()) { Target->GetActorLocation(); }

Ek notlar:

  • TSharedPtr varsayılan olarak thread-safe ref count kullanır (UE5'te ESPMode::ThreadSafe varsayılan); thread-safe olmayan mod biraz daha hızlıdır.
  • Döngüsel TSharedPtr referansları sızıntı yaratır; bir tarafı TWeakPtr yapılır.
  • Bir hedefin, kilit (lock-on) listesinin veya UI'ın Actor'a referansı genelde TWeakObjectPtr olmalıdır; aksi halde güçlü referans silinmesi gereken nesneyi hayatta tutar.
  • Slate (editör UI) kodu yoğun olarak TSharedRef/TSharedPtr kullanır.
  1. Oyun motorlarında neden custom memory allocator kullanılır? Linear (arena), pool ve stack allocator nasıl çalışır?ZorUnreal & C++Game Dev
  2. Cache-friendly veri yapısı ne demektir? Array of Structs (AoS) ile Struct of Arrays (SoA) farkı nedir?ZorUnreal & C++Game Dev
  3. C++'ta move semantics nedir? Aşağıdaki kodda hangi constructor'lar çağrılır?ZorUnreal & C++Game Dev
  4. C++'ta virtual fonksiyonlar ve vtable nasıl çalışır? Destructor neden virtual olmalıdır?OrtaUnreal & C++Game Dev
  5. Unreal'da replication nasıl çalışır? Replicated property, RepNotify ve RPC türleri arasındaki fark nedir?ZorUnreal & C++Game Dev
  6. Unreal'ın Gameplay Framework'ünde GameMode, GameState, PlayerController, PlayerState ve Pawn'ın rolleri nelerdir?OrtaUnreal & C++Game Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle