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

相关推荐
Titan20247 小时前
MySQL索引学习笔记
笔记·学习·mysql
用户3721574261357 小时前
Java 查找并高亮 Word 文字:精确查找及正则表达式模糊查找
java
zhangrelay7 小时前
Arduino-MEGA-ESP单片机理论课笔记02-硬件-2026
笔记·单片机·嵌入式硬件
zyseo87 小时前
谷歌SEO 站内搜索优化实战:把站内搜索词变成关键词金矿
java·服务器·数据库
JWASX7 小时前
Java 转 go 学习 - kitex(5)
学习·golang
bug菌7 小时前
🤔同事突然问我:Spring的注解 @Component 和 @Service 有何不同?
java·spring boot·后端
佳児素花痴╮8 小时前
线程知识点
java·开发语言·jvm
AOI小白新手上路8 小时前
VDMamba·AutoDL 复现笔记 · 学习笔记
笔记·学习
~kiss~8 小时前
LangGraph ~ 为图添加跨线程持久化
学习
fundoit8 小时前
为什么需要 Access Token 和 ID Token 两个令牌
java·spring·架构·github·oauth2