我已阅读以下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/