深度探索c++对象模型-阅读笔记

深度探索c++对象模型-阅读笔记
第一章和第三章
1. class object model
这里写图片描述
class Point的内存分布
这里写图片描述
2. 虚函数指针vptr的设定和重置都是由class的constructor,destructor和copy assignment自动完成。

class Base;
class Drive:public Base;

Drive d;
Base b = d; //b的vptr不指向Drive的虚函数表

3.虚继承情况下,base class不管在继承链中派生多少次,都只会存在一个实体。
4.多继承情况下,有可能产生多个vptr。
5.虚继承情况下,派生类会多产生一个vptr。根据不同策略,可能指向虚基类共享部分或者指向虚基类表(书中第三章 3.4节 p123)

class Base
{
public:
    virtual void func();
}
class Drive1:public virtual Base{};
class Drive2:public Base();

//win32下
sizeof(Drive1)大小为8字节
sizeof(Drive2)大小为4字节

6.指向data member的指针和指向data member选择的指针

class A
{
publicint a;
};
//指向data member的指针
int A::*p1=&A::a;  //返回类内offset,按字节算
//指向int的指针
A obj;
int *p2=&obj.a; //返回内存中真实地址
//返回a
obj.a=100;
cout<<obj.a<<" "<<obj.*p1<<endl;

7.成员函数和非成员函数有相同的存取效率,是由于将成员函数经过mangling处理,转化为了非成员函数
8.每一个含有virtual函数的class有一个虚函数表,每一个实例或者对象有一个虚函数指针指向虚函数表。(书中第四章 4.1节 p157)

Point pt;
pt->func(); //func为virtual函数
//编译器调用形式:(*pt->vptr[2])();或者(pt->vptr[2])();其中vptr为虚函数指针,2为func在虚函数表的索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值