【发布时间】:2018-09-09 03:19:00
【问题描述】:
这是我的程序,我对将为该程序创建多少 vtable 和 virtualpointer 感到困惑。如果我们不在派生类中创建虚函数,vpinter 将为此创建。
#include<iostream>
using namespace std;
class abc
{
virtual void aaa();
};
void abc::aaa()
{
}
class ddd:public abc
{
void ddda();
virtual void sddd();
};
void ddd::ddda()
{
}
void ddd::sddd()
{
}
int main()
{
abc d;
ddd *y;
abc *ab;
}
【问题讨论】:
-
您到底想解决什么实际问题?尽管我通常了解典型虚拟继承实现的基本原理,但我不能说在 25 年的 C++ 编程生涯中,我真的关心 vtable 实现细节,也不关心我的程序创建了多少不同的实际 vtable 或虚拟指针。这是我的 C++ 编译器的工作,要弄清楚;我很高兴让我的编译器完成它的工作。当然,除非我的工作是编写 C++。但事实并非如此。所以,除非你正在编写自己的 C++ 编译器,否则我不明白你为什么会关心这样的事情。
-
基于 vpointer 的创建,我将清楚地知道如何在运行时调用虚函数
-
vtable 是一个实现细节。虽然这是一种常见的实现方法,但它不是必需的方法。无论如何,除非您正在调试 C++ 编译器,否则您不需要了解 vtables 的创建。而且,如果您正在调试 C++ 编译器,您就会知道如何解决它。