是否为每个派生类的对象编译了vftable?

时间:2014-08-07 11:49:14

标签: c++

我已阅读以下帖子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所在的内存中的相同地址

1 个答案:

答案 0 :(得分:1)

它实际上依赖于实现,但我所知道的所有编译器都会对给定类的所有实例使用相同的_vptr。因此,如果更改表条目,它们将针对该类的所有实例进行更改。所以,是的,如果你有两个同一个类的实例,它们指向foo()的两个指针将指向同一个地方。