1

有两个类,第二个类将继承第一个。基类有虚函数,派生的没有虚函数。将在子类的虚函数表中找到什么。它是空的还是根本没有创建?

class base
{
private:
int m_d;
public:
virtual void foo();
virtual void bar();
};

class derived : public base
{
int m_b;
void baz();
};
4

2 回答 2

3

vtable 是 C++ 编译器的实现细节,因此没有标准答案。对于最小化每个 vtable 包含其所有基础的完整虚函数集的间接性是有意义的,但同样,这是一个实现细节。

于 2013-10-22T08:32:45.997 回答
1

典型的解决方案是每个类都有一个 vtable,因此派生类将有一个与基类的 vtable 相同的单独 vtable。这样做是为了可以dynamic_cast仅通过具有 vpointer 值来找到它是哪个类(就像 do 时一样)。

于 2013-10-22T08:31:46.823 回答