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.
| Tip | Sahiplik | Ne için | STL karşılığı |
|---|---|---|---|
| TUniquePtr | Tekil sahip | Düz C++ nesnesi, tek sahip | std::unique_ptr |
| TSharedPtr | Paylaşımlı, ref count | Düz C++ nesnesi, çok sahip | std::shared_ptr |
| TSharedRef | Paylaşımlı, null olamaz | Null olmaması garanti nesne | yok |
| TWeakPtr | Sahip değil | TSharedPtr döngüsünü kırmak | std::weak_ptr |
| TObjectPtr | GC referansı (UPROPERTY ile) | UObject üye alanı | yok |
| TWeakObjectPtr | Sahip değil, GC'yi engellemez | UObject'i gözlemlemek | yok |
// 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:
TSharedPtrvarsayılan olarak thread-safe ref count kullanır (UE5'teESPMode::ThreadSafevarsayılan); thread-safe olmayan mod biraz daha hızlıdır.- Döngüsel
TSharedPtrreferansları sızıntı yaratır; bir tarafıTWeakPtryapılır. - Bir hedefin, kilit (lock-on) listesinin veya UI'ın Actor'a referansı genelde
TWeakObjectPtrolmalıdır; aksi halde güçlü referans silinmesi gereken nesneyi hayatta tutar. - Slate (editör UI) kodu yoğun olarak
TSharedRef/TSharedPtrkullanır.
İlgili Unreal & C++ soruları
- Oyun motorlarında neden custom memory allocator kullanılır? Linear (arena), pool ve stack allocator nasıl çalışır?
- Cache-friendly veri yapısı ne demektir? Array of Structs (AoS) ile Struct of Arrays (SoA) farkı nedir?
- C++'ta move semantics nedir? Aşağıdaki kodda hangi constructor'lar çağrılır?
- C++'ta virtual fonksiyonlar ve vtable nasıl çalışır? Destructor neden virtual olmalıdır?
- Unreal'da replication nasıl çalışır? Replicated property, RepNotify ve RPC türleri arasındaki fark nedir?
- Unreal'ın Gameplay Framework'ünde GameMode, GameState, PlayerController, PlayerState ve Pawn'ın rolleri nelerdir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.