当前位置:   article > 正文

C++中的虚函数表和虚函数在内存中的位置_虚函数表存储位置

虚函数表存储位置

 目录

结论


       今天在看别人面经的时候发现了这个问题,一时间发现自己也说不清楚,还想当然的以为“虚函数表既然是类对象公有的,那么应该在静态存储区”,想当然终究只是想当然,经过试验得知,这种想法是错误的。

       由于不同的编译器在虚函数表上的实现可能不同,下面以g++来进行分析。

       先创建一个有虚函数的类A,如下所示:

  1. class A
  2. {
  3. public:
  4. A(){};
  5. ~A(){};
  6. virtual void vfun(){cout<<"vfun called!"<<endl;}
  7. };

       既然要知道虚函数表的位置,那么自然就需要找到虚函数表的地址。我们知道,对于类A这种简单的类,其对象内存布局的最开始四个字节就是一个虚函数表指针(32位编译器),而这个指针变量的值自然就是虚函数表的地址了,因此,第一步就是获取这个虚函数表指针来找到虚函数表的地址:(可参考

A *a = new A();

long vbaddr=*(int *)a;   //虚函数表地址

<
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/244035?site
推荐阅读
相关标签
  

闽ICP备14008679号