C++'ta virtual fonksiyonlar ve vtable nasıl çalışır? Destructor neden virtual olmalıdır?
Cevap
virtual bir fonksiyon, çağrılacak gerçek implementasyonun çalışma zamanında nesnenin dinamik tipine göre seçilmesini sağlar. Derleyiciler bunu genellikle her polimorfik sınıf için bir vtable (fonksiyon pointer tablosu) ve her nesnede gizli bir vptr ile uygular.
- Her nesne bir vptr taşır (64 bit'te 8 byte).
- Virtual çağrı: vptr okunur → tablodan adres alınır → dolaylı çağrı yapılır. Bu, inlining'i engeller ve dallanma tahmini/cache miss maliyeti getirebilir.
struct Enemy {
virtual ~Enemy() = default;
virtual void Update(float dt) { }
};
struct Orc : Enemy {
std::vector<int> loot;
void Update(float dt) override { /* ... */ }
};
Enemy* e = new Orc();
e->Update(0.016f); // Orc::Update çağrılır
delete e; // virtual destructor sayesinde ~Orc da çalışırVirtual destructor: Base pointer üzerinden delete yapılıyorsa ve destructor virtual değilse sadece ~Enemy çağrılır; bu undefined behavior'dur ve pratikte loot gibi kaynaklar sızar.
Ek detaylar:
- Constructor ve destructor içinde virtual çağrı, türetilmiş sürüme gitmez (nesne o anda base tipindedir).
overridevefinalkullanın;finalderleyicinin devirtualization yapmasına da yardım eder.- Oyun açısından: binlerce nesne üzerinde her karede virtual çağrı yapmak yerine aynı tipteki nesneleri gruplayıp düz döngülerle işlemek (data-oriented yaklaşım) genelde çok daha hızlıdı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?
- 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?
- TSharedPtr, TUniquePtr, TWeakPtr ve TWeakObjectPtr arasındaki farklar 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.