虚函数表与虚函数表指针

虚函数表与虚函数表是用来实现多态的,每一个类只有一个虚函数表

静态多态:函数重载(编译期确定)

动态多态:虚函数(运行期确定)

在这里插入图片描述

虚函数表的创建时机:

  • 生成时间:
    • 编译期生成,识别到virtual关键字修饰的函数,虚函数地址的数组
    • .bss: 未初始化的或者自动初始化为0的全局、静态变量
    • .data: 已经初始化的全局、静态变量
    • .rodata: 只读数据段,虚函数表,常量数据
  • 存放在哪里: 可执行程序(磁盘,只读数据段.rodata), 运行状态(内存)

虚函数指针:

  • 存放位置:
    • 一般在类的最开始位置,4字节(32位), 8字节(64位)
    • 堆区,指向虚函数表的地址
    • 类的不同对象虚函数表指针不一样
  • 创建时间:
    • 类对象构造的时候,初始化vptr
    • 如果对象是派生类,在vptr随着构造函数逐层向下进行构造,每个类指向自己的虚函数表;即构造函数先分配堆或者栈的内存,然后初始化vptr,然后初始化其他成员并执行构造函数体
    • 注:vptr在构造期间可能多次更新。当基类构造函数运行时,vptr指向基类虚函数表。而当派生类构造函数执行时,vptr会更新为指向派生类的虚函数表。这保证了构造期间,任何函数的调用都将解析到当前构造阶段的正确版本。
  • 对象析构:
    • 同理,在析构期间,从子类析构到父类,vptr将依次被设置会每个级别的基类。
    • 这里也引出了另外一个问题,在继承结构中析构函数最好为虚函数,这样当指向派生类的基类指针这种结构出现的时候,我们进行析构,通过虚函数指针的作用可以先执行子类的析构,再执行父类的析构,防止析构子类之后找不到父类的析构函数了(这是另外一个较大的问题,这里太小写得简略一下,可以自行搜索一下)。

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【k8s】(九)kubernetes1.29.4离线部署之-Token过期后加入节点

(一)kubernetes1.29.4离线部署之-安装文件准备 (二)kubernetes1.29.4离线部署之-镜像文件准备 (三)kubernetes1.29.4离线部署之-环境初始化 (四)kubernetes1.29.4离线部署之-组件安装…

生活服务推出品牌实惠团购,覆盖五一假期“吃喝玩乐”多场景

4月26日,抖音生活服务平台上线“跟着大牌过五一”活动会场,携手22家连锁品牌商家,于“五一”前推出优价团购和时令新品,覆盖“吃喝玩乐”多重购物需求,助力假期消费。同时,伴随各地涌现的文旅热潮&#xff…

SAP-ABAP-创建数据元素-02

事物码:SE11 三种数据对象,此处选择‘数据元素’ 基本类型:可以使用预定义或者域,下面一预定义为例,维护数据类型CHAR和长度10 点击字段标签,维护长度和描述, 激活,那么这个数据元素…

JavaSE-14笔记【反射机制(+2024新)】

文章目录 1.反射机制概述2.获取Class的四种方式3.通过反射机制实例化对象*4.反射机制结合配置文件灵活实例化对象*5.java.lang.reflect.Field5.1反编译类中的所有字段/属性5.2 通过反射机制给属性赋值* 6.java.lang.reflect.Method6.1反编译类中的所有方法6.2 通过反射机制调用…

变革 Perplexica:AI驱动的问答搜索引擎

Perplexica是一个开源的人工智能搜索工具,也可以说是一款人工智能搜索引擎,它深入互联网以找到答案。受Perplexity AI启发,它是一个开源选择,不仅可以搜索网络,还能理解您的问题。它使用先进的机器学习算法&#xff0c…

什么是环比折年率

环比折年率是月度(或季度)统计中一个十分重要的统计指标,由环比增速推算得到,用于反映经济的发展速度与趋势变化。环比折年率与同比增速相比具有对趋势变化灵敏度高的优点,在统计分析、趋势预测等领域有着广泛应用。 …

Docker-容器的前世今生

文章目录 Docker为什么产生?硬件虚拟化硬件虚拟化解决的问题硬件虚拟化定义硬件虚拟化技术虚拟机的优点虚拟机的缺点 操作系统虚拟化即容器容器化解决的问题容器化定义容器化技术历史 容器和虚拟机对比 Docker的发展历史Docker架构客户端服务端仓库Registry Docker重…

Docker 容器创建与使用问题汇总

目录 常用命令 Docker 18.09 Error response from daemon: Container is not running unknown flag: --gpus CUDA error: "cudaSetDevice(device_)" Docker 19.03 容器创建时指定GPU,执行 nvidia-smi 命令只显示指定的显卡 容器创建时指定GPU&…

K8S安装网络插件flannel问题修复(cni plugin not initialized)

K8S安装网络插件问题修复 卸载flannel网络步骤: #第一步,在master节点删除flannel kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl delete -f kube-flannel.yml #第二步&#xff…

Linux工具篇 之 vim概念 操作 及基础指令讲解

学校不大 创造神话 讲桌两旁 陨落的王 临时抱佛脚 佛踹我一脚 书山有路勤为径 游戏玩的很起劲 想要计算机学的好,我的博客列表是个宝 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–❀–❀…

八大元素定位方法

四、元素定位4.1 为什么要使用元素定位?要使用web自动化操作元素,必须首先找到此元素。4.2 定位工具火狐:Firebug (F12获取直接点击 Friebug图标)谷歌:F12键(开发者工具)4.3 定位元素时依赖于什么&#xff…

这份详细的智慧校园建设方案,赶紧收藏

高等教育信息化是促进高等教育改革创新和提高质量的有效途径,是教育信息化发展的创新前沿。进一步加强基础设施和信息资源建设,重点推进信息技术与高等教育的深度融合,能促进教育内容、教学手段和方法现代化,创新人才培养、科研组…

渗透之sql注入---实战1

本期的sql注入实战在:BUUCTF在线评测 (buuoj.cn) 该网站上进行。 启动靶机: 1.进来后搜索web1 2.点击【SWPU2019】Web1启动靶机。 3.进来之后在此界面进行注入。 开始注入: 1.找注入点: 我们输入1 后查看广告详情发现报错&a…

我用suno做了人生中第一首歌

前几周AI已经杀入音乐制作领域,Suno正式发布V3音乐生成模型,被业界誉为AI音乐的"ChatGPT"时刻。 借此机会,我也生成了人生中第一首歌,下面是歌词和对应的音频。 歌词: [Verse] 烽火连天万里霜 英雄豪杰赴…

你不知道的CSS链接:解锁网页导航的秘密武器

在网页设计中&#xff0c;链接&#xff08;<a>标签&#xff09;是构建信息桥梁的关键元素&#xff0c;它们不仅承载着导航的功能&#xff0c;还是提升用户体验的重要手段。然而&#xff0c;CSS赋予了链接无限的风格潜力&#xff0c;远远超出了基础的下划线和颜色变化。本…

记录不会的方法操作(C++)——容器后面插入一个容器的值

1.将一个容器中的值全部追加在另一个容器后面 记录起因&#xff1a;我想要将一个vector中的值全部追加到另一个vector后面&#xff0c;于是我想到了push_back这个函数&#xff0c;但是好像它一次只能在vector末尾插入一个值。而我上网搜索&#xff0c;也只能发现在前面插入的方…

03-JAVA设计模式-解析器模式

解释器模式 什么是解析器模式 在Java中&#xff0c;解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;该解释器使用该表示来解释语言中的句子…

Linux提权--SUID提权内核漏洞本地用户提权

免责声明:本文仅做技术交流与学习,请不要乱搞破坏... 目录 SUID提权 漏洞成因 提权过程: 手工命令探针: 参考利用&#xff1a; 脚本探针: LinEnum.sh traitor linuxprivchecker等等... Linux命令的利用: find命令 利用nc反弹 利用python反弹--棱角 内核漏洞本地用…

电磁兼容(EMC):生产的ESD防护要点及措施

目录 1. 接地和连接系统 2. 操作员及工作区域 3. 地板 4. 座椅 5. 防静电车间 早期电子产品出现质量问题有80%的问题都是生产过程静电所引起的。随着ESD的管理程序系统的普及&#xff0c;ESD问题相当减小很多。例如当今的S20.20静电控制程序产生于IBM内部审核和控制系统。…

打不完!真的打不完!海量用户线索车企该怎么办?用AI!

当车企面临海量用户线索&#xff0c;怎么找到精准用户&#xff1f;大量的电话根本打不完&#xff0c;这种情况怎么办&#xff1f;建议借助AI&#xff0c;降本增效。下面以某车企为例来帮助大家解决这个难题&#xff01; 某车企面临的问题主要有三点 第一&#xff1a;车企有来自…