3

如果 Base 是基类,而 Derived 是派生类,并且有 25 个 Derived 实例,那么如何设置 vtable 以供所有实例访问?它们在内存中的什么位置?

4

2 回答 2

3

内存中的某处将有一个 vtable,可能与代码位于同一位置。该类的每个实例都将包含一个指向该类的 vtable 的指针,因此在您的情况下,所有 25 个实例都将包含一个指向该 vtable 副本的指针。

多重继承和虚继承使事情变得复杂,但原理是一样的。

于 2012-07-26T10:10:40.957 回答
3

允许编译器在 C++ 中实现他们想要的动态调度,我认为实际上根本不需要使用 vtable,但是找到没有的编译器是非常不寻常的。

在大多数情况下,我认为每个类(包含一些虚拟方法)都将拥有一个 vtable(因此,如果我有 5 个实例,class A我仍然只有 1 个 vtable),但不应以任何方式依赖此行为。

据我所知,非虚拟类不需要 vtables。

阅读您的问题似乎您认为每个对象都有自己的代码副本,我不确定,我不想指责您这样做,但以防万一......

谷歌类似:“c++ 对象在内存中的样子”

于 2012-07-26T10:20:44.517 回答