为什么虚拟表很重要?

del*_*bao 2 c++ virtual function vtable

为了实现动态绑定,对于每个类,都有一个虚拟表来存储每个函数的addr.为什么需要这种间接?我们可以让类直接将ptr存储到正确的函数中吗?

Mar*_*k B 6

事实上你可以做到这一点.然后,每个多态类的每个实例都需要将其整个虚拟表存储为对象的一部分.对于具有大量虚拟方法的类,这将是一个重要的内存开销.不能保证它甚至会更快,因为你可以通过存储如此多的冗余数据来减少缓存局部性.