【问题标题】:What is a vtable in C++ [duplicate]什么是 C++ 中的 vtable [重复]
【发布时间】:2011-04-03 01:34:04
【问题描述】:

可能重复:
why do I need virtual table?

什么是 C++ 中的 vtable?

到目前为止,我知道 vtable 是一个虚拟表,其中包含指向虚拟函数的指针数组。有没有我可以阅读的带有实际实现示例的文章? (任何演练将不胜感激。)

【问题讨论】:

标签: c++ vtable


【解决方案1】:

V 表(或虚拟表)是大多数 C++ 实现实现多态性的方式。对于一个类的每个具体实现,都有一个指向所有虚方法的函数指针表。指向该表(称为虚拟表)的指针作为数据成员存在于所有对象中。当调用虚方法时,我们会查找对象的 v-table 并调用相应的派生类方法。

【讨论】:

  • 如果你的基类 Foo 有一个虚方法,那么你的派生类 Bar 将有一个 vtable 并且链接器将检查它(如果缺少它说,未定义的对 `vtable for Bar' 的引用)
【解决方案2】:

vTable(virtual table)是动态调度的一个实现细节(virtual方法)。

更多详情请见C++-Lite-Faq

【讨论】:

  • 链接失效,请更新或删除。
  • @donturner 恕我直言,否决投票是粗鲁的。谷歌搜索 C++ Lite Faq 将页面作为第二个结果。您可以通过自己编辑回复来为我省去其他人的麻烦。毕竟,答案是 7 岁。
  • @phadej 链接仅出于以下原因不赞成回答:外部资源可以移动、删除或更改,并且此处的回答需要自给自足。
  • 链接有效!非常好的文章!
  • 这是对仅链接答案的定义。
【解决方案3】:

尽管如此,它并不是标准的 C++ 术语。它只是实现用来实现虚函数/动态绑定的一个实现细节

【讨论】:

  • 这不是标准的术语,也不是标准化的,但它是一个相当标准的术语。无论如何,这作为评论会更好,因为它不会试图回答问题。
猜你喜欢
  • 2011-04-20
  • 2012-07-23
  • 2016-03-28
  • 2011-01-14
  • 2015-03-25
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多