虚拟指针

时间:2011-01-11 14:27:24

标签: c++

什么是虚拟指针? 大家好, 今天我接受了电话采访并得到一个问题:“什么是虚拟指针?” 我偶然发现了这个,所以在完成之后,我尝试了谷歌。不幸的是,它只给了我一个虚拟表参考。

那么简单英语中的虚拟指针是什么?你如何定义它?

谢谢。

5 个答案:

答案 0 :(得分:14)

没有“虚拟指针”这样的东西。

面试官可能有一些意思:

  • 指向多态类的指针
  • 指向多态类的vtable的指针(credit @Maxim)
  • 多态类
  • 的vtable中的指针
  • 具有被覆盖的operator->
  • 的智能指针对象
  • 指向虚拟成员函数的指针(credit @ Matthieu M)

但就“虚拟指针”而言,没有这样的事情。

答案 1 :(得分:4)

我的解释是:vtable指向虚拟方法的内容。

措辞不是很好,恕我直言。

答案 2 :(得分:4)

你的面试官很可能意味着虚拟桌面指针。 http://en.wikipedia.org/wiki/Virtual_table#Implementation

答案 3 :(得分:4)

当有一个或多个虚函数时,C ++编译器会创建一个名为virtual-pointer的隐藏类成员或简称vptr。这个vptr是一个指向函数指针表的指针。该表也是由编译器创建的,称为虚函数表或vtable。 vtable的每一行是指向相应虚函数的函数指针。

要完成后期绑定,编译器会为包含虚函数的每个类以及从中派生的类创建此vtable表。编译器将该特定类的虚函数的地址放在'vtable'中。

当通过基类指针进行虚函数调用时,编译器会安静地插入代码以获取VPTR并在VTABLE中查找函数地址,从而调用正确的函数并导致后期/动态绑定发生。

答案 4 :(得分:1)

它也可能意味着创建一个虚拟/虚拟的函数指针纯粹的父亲的方法,并与孩子调用它,仍然不是一个好的措辞......