在类子级的虚函数表中可以找到什么.它是空的或根本没有创建

What will be found in the table of virtual functions of the class child. It is empty or not created at all?

本文关键字:什么 创建 函数      更新时间:2023-10-16

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

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

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

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

相关文章: