cpp对象模型学习笔记1.1-2.8

1.什么是cpp对象模型

cpp对象模型是指编译器实际上是怎么实现的c++的对象,比如构造函数、析构函数、虚函数、继承关系。

2.构造函数

在学cpp的时候一般会有这样的知识被告知,当我们没有主动写任何类的构造函数的时候,编译器会为我们合成一个默认的构造函数,这句话的问题是有时候构造函数不需要采取任何行为,编译器就不会为我们合成,哪怕我们认为是合成了。

体现就是如果去检查汇编文件是没有构造函数的。

编译器会为我们合成默认构造函数的情况:

1.类内的成员所属的类有缺省的构造函数

编译器会在我们没有构造函数,且被构造的情况下生成一个默认构造函数去调用成员的缺省构造函数

2.父类有缺省的构造函数

编译器会为我们生成缺省构造函数调用父类的构造函数

3.拥有任何虚函数

编译器会为我们在构造函数内初始化vptr和虚函数表,这是虚函数的实现机制

4.拥有虚基类

编译器会为我们在构造函数内初始化虚基类表

3.拷贝构造函数

编译器会为我们合成拷贝构造函数的情况,首先得是我们没有手动写拷贝构造函数,并且产生了拷贝调用的应用场景。

四种情况也是

1.成员有拷贝构造函数

2.父类有拷贝构造函数

3.虚函数

4.虚基类

4.编译器对函数的优化

当函数内部的局部变量作为返回值的时候,如果先声明tmp再返回,这时候可能有一个拷贝构造的过程,但是如果直接在返回的时候构造,编译器的优化开启的状态会直接在之前拷贝的位置构造,减少了一次构造函数的调用操作。

5.总结

阅读深度探索c++对象模型的时候还是比较枯燥的不过收获很多,比如vptr的部分。

相关推荐
2601_948606182 分钟前
LaTeX学习笔记:开场白与索引
笔记·学习
_olone2 分钟前
牛客每日一题:刷题统计(Java)
java·算法·容斥原理·牛客
junnhwan3 分钟前
LeetCode Hot 100——栈
java·数据结构·算法·leetcode·hot 100
Gin3873 分钟前
SpringBoot实现文件上传和下载
java·spring boot·后端
蓝天星空7 分钟前
C# .net闭源与Java开源框架的对比
java·c#·.net
金牌归来发现妻女流落街头9 分钟前
【用 Java API Client 操作 Elasticsearch】
java·elasticsearch·jenkins
Seven979 分钟前
调试排错 - 线程Dump分析
java
Z...........12 分钟前
Spring日志管理
java·后端·spring
lj8508612 分钟前
性能测试总结
java·开发语言·spring
罗罗攀13 分钟前
PyTorch学习笔记|张量的索引分片、合并和维度调整
人工智能·pytorch·笔记·python·学习