<<深度探索c++对象模型>>第一章读书笔记

本文探讨了C++中封装的成本及其对布局的影响,重点分析了虚函数和虚基类的作用及其实现机制。此外,还介绍了C++对象模型的特点,包括非静态数据成员、静态数据成员以及虚函数的存储方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.c++对数据和操作加上封装后的布局成本是否增大?

没有虚函数和虚基类,封装后的class并没有增加成本.成员函数岁在class的声明中,却不出现在对象中,一个类共享一份代码.每一个非inline的函数只有一份实例.每一个inline函数则会在其每一个使用者上产生一个函数实例.

封装后的额外负担主要由virtual性质引起的

a   virtual 机制:用以执行一个有效率的执行期绑定

        b  virtual基类:用以实现多次出现在继承体系中的虚基类只有一个单一而被共享的实例

2.c++对象模型

        在现在的c++对象模型出现之前,还有过简单对象模型和表格驱动模型,可参考p7p8.

nonstatic数据成员存在于每个对象之中,static数据成员属于整个类,存放于具体的对象之外.static成员函数和nonstatic成员函数也存放于对象之外.

而每个对象都支持虚函数.

a  每个类产生出一堆指向虚函数的指针,存放在虚表中,虚表的第一个slot通常存放的是此对象的类型信息

b  每个对象都安插一个虚指针指向虚表

此模型的优点在于它的空间时存取时间的效率,缺点为当nonstatic数据成员改变时,相对的应用代码需要重新编译.

而继承模型则采用的是:基类子对象的数据成员直接存放在继承类中,这样存取效率高,缺点是这些成员改变时用户代码需要重新编译.

包含虚基类的模型在下面文章详解.


未完待续...........





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值