C++中的vtable是什么?

42

可能重复:
为什么需要虚函数表?

C++中的vtable是什么?

据我所知,vtable是一个虚拟表,其中包含指向虚函数的指针数组。是否有一篇文章可以阅读,其中包含实际实现的示例?(任何演练都会受到赞赏。)


3
http://en.wikipedia.org/wiki/Virtual_method_table - DumbCoder
https://dev59.com/mXI95IYBdhLWcg3wvwoQ - DumbCoder
4
如果您不打算编写编译器,那么这些信息对于理解C ++没有太大的帮助。 - Martin York
4
很遗憾,这个被认为是重复的。在这个问题上被接受的答案比“原始”问题上的更好。 - Adrian McCarthy
3个回答

48

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


3
如果你的基类Foo有一个虚函数,那么你的派生类Bar将会有一个虚表(vtable),链接器会检查这一点(如果缺失,则会显示未定义的引用`vtable for Bar')。 - Will

6

vTable(虚表)是动态分派(虚方法)的实现细节。

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


1
链接已损坏,请更新或删除。 - donturner
2
@donturner 我个人认为你的负评有些无礼。通过谷歌搜索“C++ Lite Faq”可以在第二个结果中找到该页面。你本可以编辑回复来帮助我和其他人避免麻烦。毕竟,这个答案已经有7年了。 - phadej
8
因为外部资源可能会移动、被删除或更改,所以仅提供链接的答案是不被赞同的,这也是一个答案需要自给自足的原因。请注意不改变原意并确保通俗易懂。 - bolov
2
这是仅有链接的回答的定义。 - AJMansfield
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。- 来自审查 - CalvT
显示剩余6条评论

-2

就其价值而言,这不是标准的C++术语。它只是实现细节,用于实现虚函数/动态绑定。


21
这不是标准术语,也没有被规范化,但它是一个相当通用的术语。无论如何,这应该作为评论更好,因为它并未尝试回答问题。 - Potatoswatter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接