深入探索c++对象模型.docx

 2024-02-14 01:01:27  阅读 0

1 添加包装后布局成本增加多少?

没有增加成本。 这三个数据成员直接包含在每个类对象中,就像c一样。 尽管成员函数位于对象的声明内,但它们并不出现在对象中。 每个非内联函数只会创建一个函数。 实体,至于每个“有零个或一个定义”的函数都会在每个用户(模块)中生成一个函数实体,这并不会带来任何空间或执行器的不良响应,在c++布局中主要是访问时间上的额外负担是由以下原因引起的:

虚函数机制:支持高效的“执行时绑定”

虚拟基类:用于实现“继承系统中多次出现的积累,具有单一且共享的实体”

C++中有两种类型的类数据成员:静态和非静态

类成员函数分为三种类型:静态、非静态和虚函数

2 C++对象模型

在该模型中,非静态数据成员配置在每个类对象内部,静态数据成员存储在所有类对象外部,静态和非静态函数成员也放置在所有类对象外部。 ,虚函数的支持分两步:

1 每个类都会生成一堆指向虚函数的指针并将它们放在一个表中。 这张表叫做表

探索c++对象模型_深度探索c模型_c对象sql返回对象

2.为每个类对象添加一个指针,指向相关的虚表。 通常这个指针被称为vptr。 vptr的设置和重置由各个类的构造函数、西狗函数和赋值运算符自动完成。 与(支持类型,RTTI)关联的每个类也通过虚拟表指出,通常位于表的第一个槽。

表示一个类对象需要多少内存? 一般来说,它必须具备:

1 其非静态数据成员的总大小

2. 由于(翻译注释)需要加上任意空格(可能存在于集合之间,也可能存在于集合边界)

探索c++对象模型_深度探索c模型_c对象sql返回对象

3 加上内部为支持而产生的任何额外负担

看一个小例子:

班级

:

〜(){};

无效(){cout

标签: 函数 静态 对象

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码