Memiliki setidaknya satu metode virtual dalam kelas C ++ (atau salah satu kelas induknya) berarti bahwa kelas tersebut akan memiliki tabel virtual, dan setiap instance akan memiliki penunjuk virtual.
Jadi biaya memorinya cukup jelas. Yang paling penting adalah biaya memori pada instance (terutama jika instance berukuran kecil, misalnya jika mereka hanya dimaksudkan untuk berisi integer: dalam hal ini memiliki pointer virtual di setiap instance dapat menggandakan ukuran instance. Adapun ruang memori yang digunakan oleh tabel virtual, saya kira itu biasanya dapat diabaikan dibandingkan dengan ruang yang digunakan oleh kode metode yang sebenarnya.
Ini membawa saya ke pertanyaan saya: apakah ada biaya kinerja yang dapat diukur (yaitu dampak kecepatan) untuk membuat metode virtual? Akan ada pencarian di tabel virtual saat runtime, pada setiap panggilan metode, jadi jika ada panggilan yang sangat sering ke metode ini, dan jika metode ini sangat singkat, mungkin ada kinerja yang dapat diukur hit? Saya kira itu tergantung pada platformnya, tetapi adakah yang menjalankan beberapa tolok ukur?
Alasan saya bertanya adalah bahwa saya menemukan bug yang terjadi karena programmer lupa mendefinisikan metode virtual. Ini bukan pertama kalinya saya melihat kesalahan seperti ini. Dan saya berpikir: mengapa kita menambahkan kata kunci virtual saat diperlukan daripada menghapus kata kunci virtual padahal kita benar-benar yakin bahwa kata kunci tersebut tidak diperlukan? Jika biaya kinerja rendah, saya pikir saya hanya akan merekomendasikan yang berikut ini di tim saya: cukup buat setiap metode virtual secara default, termasuk destruktor, di setiap kelas, dan hanya hapus saat Anda perlu. Apakah itu terdengar gila bagi Anda?