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的部分。

相关推荐
驭渊的小故事4 分钟前
java中的进程的详细解析
java·开发语言
Mr_sst11 分钟前
Codex 部署、使用教程 & Vibe Coding 实战指南
java·ai·语言模型·chatgpt·ai编程
无限进步_14 分钟前
【C++】C++11的类功能增强与STL变化
java·前端·数据结构·c++·后端·算法
AI算法沐枫24 分钟前
大一学生如何入门机器学习,深度学习,学习顺序如何?
人工智能·python·深度学习·学习·线性代数·算法·机器学习
他们叫我阿冠34 分钟前
实习前自我培训-Day2学习
学习
日月云棠37 分钟前
JAVA数据结构与算法 - 基础:常用集合简述
java·算法
噢,我明白了38 分钟前
MyBatis-Plus的引入和配置
java·tomcat·mybatis
wuxinyan12339 分钟前
工业级大模型学习之路020:LangChain零基础入门教程(第三篇):提示词工程与提示模板系统
人工智能·python·学习·langchain
日月云棠41 分钟前
JAVA数据结构与算法 - 基础:BlockingQueue
java·算法
哪吒编程44 分钟前
GPT 5.5 Thinking深度思考了十几分钟,给我挖了一个排查一周的并发大坑
java