首页 > 编程语言 >C++ virtual table

C++ virtual table

时间:2023-01-10 22:46:37浏览次数:52  
标签:typeinfo offset C++ virtual 基类 table class 指针

参考Virtual Table Components and Order
不同编译器实现不同,这是gcc的标准

  • virtual call(vcall) offset. 虚拟调用偏移。当一个class存在虚基类时,编译器便会在vtable中插入vcall offset,针对在虚基类或者虚基类的基类中声明的virtual function,为了通过虚基类调用virtual function所执行的this指针调整
  • virtual Base(vbase) offset. 虚基类偏移。当一个class存在虚基类时,编译器便会在primary virtual table中安插相应的vbase offset,用于访问对象的虚基类子对象
  • offset to top. 到class顶部的偏移,指的该class的vptr到对象顶部的位移,其类型为 ptrdiff_t。 它总是存。 偏移量提供了一种使用vptr从任何基类对象中查找对象顶部的方式。 这对于 dynamic_cast<void*> 尤其必要
  • typeinfo pointer. 指针指向用于 RTTI 的 typeinfo 对象。 它总是存在的。 给定类的每个vtable中的所有typeinfo 指针都必须指向相同的 typeinfo 对象。 typeinfo 相等性的正确实现是检查指针相等性,但指向不完整类型的指针(直接或间接)除外。 typeinfo 指针在多态类的场景下是有效指针,对于非多态类为零。
  • virtual function pointers. 函数指针用于虚函数调度。 每个指针要么保存类的虚函数的地址,要么保存在将控制权转移到虚函数之前执行某些调整的辅助入口点的地址。

标签:typeinfo,offset,C++,virtual,基类,table,class,指针
From: https://www.cnblogs.com/miyanyan/p/17034138.html

相关文章

  • Linux 下使用GCC/G++编译C++程序
    Linux下使用GCC/G++编译C++程序例程:/*hello.cpp*/#include<iostream>usingnamespacestd;intmain(){cout<<"hellocpp"<<endl;return0;}......
  • el-table合并某个字段相同的项
    1、el-table添加span-method<el-table:data="table_data"id="out-table":span-method="objectSpanMethod"style="width:100%">...</el-table>2、合并的方法......
  • GPS转化ECEF坐标系(0) python和c++代码
    https://www.cxyzjd.com/article/taiyang1987912/112982150 importmatha=6378137b=6356752.3142f=(a-b)/ae_sq=f*(2-f)pi=3.14159265359'''......
  • C++获取CPU信息
    #include"windows.h" #include"iostream"#include"string"usingnamespacestd;//用来存储信息DWORDdeax;DWORDdebx;DWORDdecx;DWORDdedx;voidExeCPUID(DWORD......
  • C/C++ 异常处理机制(例:文件拷贝)
    异常是一种程序控制机制,与函数机制互补。函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它可以在出现“意外”时中断当前函数,并以某种机制......
  • Office - Excel - 数据透视表 Pivot Table
     一、透视表数据源可以通过Excel直接去链接数据库(需要公司本身支持才行)也可以把需要分析的数据,从数据库中直接拷贝出来--这里演示的是这一种: 将结果集,放在一个ta......
  • 算法与数据结构高手养成-求职提升特训课(提供C++Java+Python 3大主流语言源码)
    ​​点击下载:算法与数据结构高手养成-求职提升特训课(提供C++Java+Python3大主流语言源码)​​  提取码:br1p《算法与数据结构高手养成-求职提升特训课》,一共17章,课程提供......
  • 【c&c++】socket编程中的 htons()
      在刚刚接触socket时,遇到了htons()函数,就直接懵逼了,这是什么东西,有什么用?就查了一些资料。  htons()是网络字节序与主机字节序之间转换的函数。用生活中的例子来......
  • C++ 中的 const 限定符
    const需要与“常量”这个说法做一个区分。const就是const,常量是常量,有时候可以通用,但有时候又不能混淆。const限定符const修饰的对象的值不能被改变。可以用来提......
  • C++笔试题汇总二
    C++笔试题一1.以下三条输出语句分别输出什么?[C易]charstr1[]="abc";charstr2[]="abc";constcharstr3[]="abc";constcharstr4[]="abc";constchar*str5......