继承关系下类的内存布局

参考:https://blog.csdn.net/qq_28114615/article/details/88077009
针对牛客网按知识分类中C++题第158个
1.每一个 class 产生出一堆指向 virtual functions 的指针,放在表格之中,这个表格被称为 virtual table(vtbl)。

2,。每一个 class object 被添加了一个指针,指向相关的 virtual table 。通常这个指针被称为 vptr,在32位系统中占4个字节。64位占8个字节。vptr 的设定(setting)和重置(resetting)都由每一个 class 的constructor、destructor 和 copy assignment 运算符自动完成,每一个 class 所关联的 type_info object (用以支持 runtime type identigication,RTTI)也经由 virtual table 被指出来,通常是放在表格的第一个 slot 处。

从以上信息,我的认识时,一个 class 如果有 virtual function,那么它就会把自己的 virtual function 信息”上交“给 virtual table(vtbl)。如果其他 class 比如 class A 继承它,或者拷贝构造它,那么这个 virtual table 就会被share,A 就会得到该 virtual table 的 vptr,并且如果 A 自己有virtual function,也会产生新的 virtual function 指针放入 vptr 所指的virtual table 之中。然后这个 virtual table 会放在class A 的地址的首部。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值