随笔 - 165,  文章 - 0,  评论 - 4,  阅读 - 18023

1.当调用一个对象对应的函数时,通过对象内存中的vptr(虚函数表指针)找到该类的vtbl(虚函数表)
虚函数表位于只读数据段(.rodata),即:C++内存模型中的常量区
虚函数代码则位于代码段(.text),也就是C++内存模型中的代码区
虚函数指针跟随对象实例被创建,在堆区或者栈区(只有使用new运算符,对象才会建立在堆上;将析构函数设为私有,编译器就不会在栈空间上为类对象分配内存)
2.从虚函数表中找到调用的虚函数的指针(地址)

虚函数表vtbl:虚函数指针数组,记录着该类各个虚函数的首地址

参考博客:C++进阶之虚函数表

注意:在多态中基类必须定义虚析构函数,否则会导致在对子类delete时,无法调用子类的析构函数而造成内存泄漏
正常情况下的调用和释放子类对象的过程:父类构造函数-子类构造函数-子类析构函数-父类析构函数

posted on   孜孜不倦fly  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示