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

最佳答案

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

关于c++ - vftable是否按派生类的每个对象进行编译?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25181753/

10-14 04:51