如果Base是基类并派生了派生类,并且有25个Derived实例,那么如何设置vtable以供所有实例访问?它们在哪里装入记忆?
答案 0 :(得分:3)
内存中会有一个vtable,可能与代码在同一个地方。 该类的每个实例都将包含一个指向该类的vtable的单个指针,因此在您的情况下,所有25个实例都将包含指向vtable的一个副本的指针。
多重和虚拟继承使事情变得复杂,但原理是相同的。
答案 1 :(得分:3)
允许编译器实现动态调度,但他们想要在c ++中,我认为实际上根本不需要使用vtable,但是找到一个没有的编译器是非常不寻常的。 / p>
在大多数情况下,我认为每个类(包含一些虚拟方法)将拥有一个vtable(因此,如果我有5个class A
实例,我仍然只有1个vtable),但这种行为不应该以任何方式依赖。
据我所知,非虚拟类不需要vtable。
阅读你的问题似乎你认为每个对象都有自己的代码副本,我不确定,我不想指责你这样的东西,以防万一...
谷歌类似于:“c ++对象在内存中的样子”