Có ít nhất một phương thức ảo trong một lớp C ++ (hoặc bất kỳ lớp cha nào của nó) có nghĩa là lớp đó sẽ có một bảng ảo và mọi cá thể sẽ có một con trỏ ảo.
Vì vậy, chi phí bộ nhớ là khá rõ ràng. Điều quan trọng nhất là chi phí bộ nhớ trên các phiên bản (đặc biệt nếu các phiên bản nhỏ, chẳng hạn nếu chúng chỉ để chứa một số nguyên: trong trường hợp này, việc có một con trỏ ảo trong mọi phiên bản có thể tăng gấp đôi kích thước của các phiên bản. Đối với không gian bộ nhớ được sử dụng hết bởi các bảng ảo, tôi đoán nó thường không đáng kể so với không gian được sử dụng hết bởi mã phương thức thực.
Điều này đưa tôi đến câu hỏi của mình: có chi phí hiệu suất có thể đo lường được (tức là tác động tốc độ) để tạo một phương pháp ảo không? Sẽ có một tra cứu trong bảng ảo trong thời gian chạy, sau mỗi lần gọi phương thức, vì vậy nếu có rất nhiều lần gọi phương thức này và nếu phương thức này rất ngắn, thì có thể có một lần truy cập hiệu suất có thể đo lường được không? Tôi đoán nó phụ thuộc vào nền tảng, nhưng có ai chạy một số điểm chuẩn chưa?
Lý do tôi hỏi là tôi đã gặp lỗi xảy ra do một lập trình viên quên định nghĩa một phương thức ảo. Đây không phải là lần đầu tiên tôi thấy sai lầm kiểu này. Và tôi nghĩ: tại sao chúng ta lại thêm từ khóa ảo khi cần thay vì loại bỏ từ khóa ảo khi chúng ta hoàn toàn chắc chắn rằng nó không cần thiết? Nếu chi phí hiệu suất thấp, tôi nghĩ tôi sẽ chỉ đơn giản đề xuất những điều sau trong nhóm của mình: chỉ cần đặt mọi phương thức ảo theo mặc định, bao gồm cả hàm hủy, trong mọi lớp và chỉ xóa nó khi bạn cần. Điều đó nghe có vẻ điên rồ với bạn?