深度探索C++对象模型学习笔记总结

第一章:关于对象

#C++在布局以及存取时间上的额外负担主要是由虚函数机制和虚基类造成的。

#虚函数不计算在类对象的sizeof()内,但是虚函数会让类对象的sizeof()增加4个字节以容纳虚函数表指针

#一个类对象(包括空类)至少占用1个字节的内存空间。C++编译器会给每个空对象分配一个字节的内存空间,是为了区分空对象占用的内存位置,每个空对象都有独一无二的内存地址。

#类中不管有几个虚函数,类内都只会产生一个虚函数指针(指针大小为4),指向虚函数表,表内存放虚函数地址。

1.1 C++对象模式

#类成员变量:static,nonstatic

#类成员函数:static,nonstatic,virtual

#只有非静态成员变量(int a=1)和虚函数指针(vptr)才属于类的对象内。vptr指向虚函数表,表内依次存放每个非静态成员函数(包括虚函数和非静态成员函数)的地址。静态成员函数位于类对象外部。

1.2 关键词带来的差异

#struct class

1.3 对象的差异

第二章:构造函数语意学

2.1 默认构造的构造操作

#c++新手的两个误解:
1)任何类如果没有定义默认构造函数,就会被合成出来一个。
2)编译器合成出来的默认构造函数会显式设定“类内每一个数据成员的默认值”。
上述两种说法都是错误的!

#C++编译器在以下四种情况下会给类生成默认构造函数:

一、这个类中有成员是另一个类的对象,且该类对象内含有默认构造函数。那么C++编译器会给这个类也生成一个默认构造函数,用来调用其成员对象的构造函数,完成该成员的初始化构造。

二、这个类的父类有默认构造函数。那么C++编译器也会帮你生成该子类的默认构造函数,以调用父类的默认构造函数,完成父类的初始化。

三、这个类中存在虚函数(自己声明或者继承得到)。那么C++编译器会为你生成默认构造函数,在编译期生成函数虚表和虚函数指针指向虚函数表。

四、这个类存在虚基类(有直接虚基类或者继承链上有虚基类)。那么C++编译器会为你生成默认构造函数,以初始化虚基类表(vbtable)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值