Bir C ++ sınıfında (veya üst sınıflarından herhangi birinde) en az bir sanal yönteme sahip olmak, sınıfın sanal bir tabloya sahip olacağı ve her örneğin sanal bir işaretçiye sahip olacağı anlamına gelir.
Yani hafıza maliyeti oldukça açık. En önemlisi, örneklerdeki bellek maliyetidir (özellikle örnekler küçükse, örneğin yalnızca bir tamsayı içermeleri amaçlanıyorsa: bu durumda her örnekte bir sanal işaretçiye sahip olmak örneklerin boyutunu ikiye katlayabilir. sanal tablolar tarafından kullanılan bellek alanı, gerçek yöntem kodu tarafından kullanılan alana kıyasla genellikle ihmal edilebilir.
Bu beni soruma getiriyor: Bir yöntemi sanal yapmak için ölçülebilir bir performans maliyeti (yani hız etkisi) var mı? Çalışma zamanında, her yöntem çağrısında sanal tabloda bir arama olacaktır, bu nedenle bu yönteme çok sık çağrılar varsa ve bu yöntem çok kısaysa, ölçülebilir bir performans vuruşu olabilir mi? Sanırım bu platforma bağlı, ancak herhangi biri bazı kriterler uyguladı mı?
Sormamın nedeni, bir programcının sanal bir yöntemi tanımlamayı unutmasından kaynaklanan bir hatayla karşılaşmam. Bu tür bir hatayı ilk kez görmüyorum. Düşündüm: neden biz do eklemek sanal anahtar kelime yerine gerektiğinde çıkarmadan kesinlikle emin olduğunu zaman sanal anahtar kelime değil gerekli? Performans maliyeti düşükse, ekibimde aşağıdakileri tavsiye edeceğimi düşünüyorum: her sınıfta yıkıcı dahil olmak üzere her yöntemi varsayılan olarak sanal yapın ve yalnızca ihtiyacınız olduğunda kaldırın. Bu sana çılgınca geliyor mu?