当前位置:网站首页>对象模型-虚指针虚表
对象模型-虚指针虚表
2022-08-09 15:45:00 【老乐大魔王】
ObjectModel
vptr(虚指针)&&vtable(虚表)「虚机制」
对象模型在底层内存的分析
先上代码:
class a{
public:
virtual void virtual_func1(); //虚函数
virtual void virtual_func2(); //虚函数
void func1();
void func2();
private:
int m-data1,m-data2;
}
class b:public a{
public:
virtual void virtual-func1(); //子类b重写了父类a的虚函数
void func3();
private:
int m-data3;
}
class c:public b{
public:
virtual void virtual-func1(); //子类c重写了父类b的虚函数
void func4();
private:
int m-data1,m-data2;
}

图表达的类对象在内存中的分布是真实存在的,从图中可以看出类中含有一个以上的虚函数并且类和类之间有继承关系时(函数的继承不是指继承函数所占内存大小,而是指继承函数调用权),类内会有多出一个指针(虚指针) 指向 虚表,子类没有重写(OverRide)的虚函数都会指向同一个虚函数(相同地址),而子类重写的虚函数会被重新分配一个地址.编译器看到有指针指向的类使用虚函数时就进行图示调用(动态绑定),即指向对象的p指针通过指向虚表的vptr找到指向虚函数的vtable最后找到想要调用函数地址,虚函数的调用解释称成C形式的代码如下所示:
*(ptr->vptr)[n](p)(*ptr->vptr[n])(p)
总结
- C++编译器看到函数就会判断进行的是静态绑定还是动态绑定,而动态绑定(虚机制)的条件为:1.必须通过指针调用 2.指针是向上转型(up-cast) 3.调用的是虚函数
- 动态绑定:当一个对象发送消息请求服务时,要根据接受对象的具体情况将请求的操作与实现的方法进行连接
- 虚机制的作用:面向对象的多态性(同一个父类的不同子类有不同的行为通过重写虚函数实现)
边栏推荐
- B43 - 基于STM32单片机的自动视力检测仪
- B50 - 基于51单片机的儿童成长管理系统
- OpenCV 图像变换之 —— 拉伸、收缩、扭曲和旋转
- IDEA中Lombok插件的安装与使用
- CocosCreator接入微信小游戏
- 2.1、基于并行上下文注意网络的场景文本图像超分辨率
- [Server data recovery] Data recovery case of file system data loss caused by SAN LUN mapping error
- 2022年8月9日:用C#生成.NET应用程序--使用 Visual Studio Code 调试器,以交互方式调试 .NET 应用(不会,失败)
- 【Web渗透】信息收集篇——Google搜索引擎(二)
- 【Web渗透】信息收集篇——Google搜索引擎(一)
猜你喜欢

三.两数交换 空指针 && 野指针 解引用问题

HR获取入职日期 RP_GET_HIRE_DATE

Smart Light Pole Gateway Smart Transportation Application

2022年8月9日:用C#生成.NET应用程序--使用 Visual Studio Code 调试器,以交互方式调试 .NET 应用(不会,失败)

Using Prometheus skillfully to extend the kubernetes scheduler

想通这点,治好 AI 打工人的精神内耗

A51 - 基于STM32的DHT11和LCD显示串口通信仿真

3种特征分箱方法!

网络——介质访问控制

B44 - Based on stm32 bluetooth intelligent voice recognition classification broadcast trash
随机推荐
NFT+IDO预售代币合约模式系统开发
After the WeChat developer tool program is developed, no error is reported, but the black screen "recommended collection"
网络——IPv6 vs IPv4
IDEA启动缓慢原因(一)
视频聊天源码——一对一直播如何提高直播质量?
PHP completes missing dates in date ranges/returns missing dates
B43 - 基于STM32单片机的自动视力检测仪
国星光电吉利产业园项目主体结构全面封顶,将重点生产 RGB 小间距、Mini LED、TOP LED 等产品
Insert a number and sort "Suggested Favorites"
Selenium的安装
线性表重点之链表
PADS生成位号图
uni-app中websocket的使用 断开重连、心跳机制
A42 - 基于51单片机的洗衣机设计
总结了 110+ 公开专业数据集
The article details of the qiucode.cn website realize the code block can be copied by clicking the button
网络——虚拟专用网和地址转换NAT
margin:auto实现盒子水平垂直居中
微信开发者工具程序开发好后,不报错,但是黑屏「建议收藏」
自定义过滤器和拦截器实现ThreadLocal线程封闭