我已阅读以下帖子Virtual dispatch implementation details 并且只有一件事我不清楚。
给定多态Base和派生类 - 编译器是否复制了每个派生对象的vftable?或者所有派生对象都将指向派生类内存空间中的相同vftable。
进入编码...
class B
{
public:
virtual void foo() = 0;
}
class D : public B
{
virtual void foo() {}
}
D object1;
D object2;
在上面的代码中,object1._vptr
会指向与object2._vptr
相同的地址吗? (这意味着_vptr[foo position]
将指向foo
所在的内存中的相同地址
答案 0 :(得分:1)
它实际上依赖于实现,但我所知道的所有编译器都会对给定类的所有实例使用相同的_vptr。因此,如果更改表条目,它们将针对该类的所有实例进行更改。所以,是的,如果你有两个同一个类的实例,它们指向foo()
的两个指针将指向同一个地方。