虚表指针和虚函数表

1.虚函数表指针(vptr)创建

vptr跟着对象走,所以对象什么时候创建出来,vptr就什么时候创建出来,也就是运行的时候。
(1)当程序在编译期间,编译器会为构造函数中增加为vptr赋值的代码(这是编译器的行为),
(2)当程序在运行时,遇到创建对象的代码,执行对象的构造函数,那么这个构造函数里有为这个对象的vptr赋值的语句。

2.虚函数表创建时机

虚函数表创建时机是在编译期间。编译期间编译器就为每个类确定好了对应的虚函数表里的内容。
所以在程序运行时,编译器会把虚函数表的首地址赋值给虚函数表指针,所以,这个虚函数表指针就有值了。

虚函数表存储虚函数的地址,即虚函数表的元素是指向类成员函数的指针,而类中虚函 数的个数在编译时期可以确定,即虚函数表的大小是在编译时期确定的,不必动态分配内存空间存储虚函数表,所以不再堆中. 根据以上特征, 虚函数表类似于类中静态成员变量存储于全局变量区。
#C/C++#
全部评论

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
5
分享
牛客网
牛客企业服务