【问题标题】:how can see how many vtable and vpointer created for my program in program level [duplicate]如何在程序级别查看为我的程序创建了多少个 vtable 和 vpointer [重复]
【发布时间】:2018-09-09 03:19:00
【问题描述】:

这是我的程序,我对将为该程序创建多少 vtablevirtualpointer 感到困惑。如果我们不在派生类中创建虚函数,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++ 编译器,您就会知道如何解决它。

标签: c++ unix vtable


【解决方案1】:

我从“Effective C++”中阅读了一些信息,“每个类都有一个虚表,如果它有虚函数,虚表将包含虚函数的虚拟指针”。我想它会对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2013-11-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    相关资源
    最近更新 更多