news 2026/2/7 2:29:22

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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的部分。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/6 17:06:15

实用linux命令行

1.概述 在实际做实验的过程中一直用的 2.命令行 2.1激活环境 conda activate 环境名 2.2创造文件夹和文件 mkdir 文件夹名 touch 文件 2.3创造后台程序,让服务器可以在被关闭后继续跑 tmux new -s 名字 打卡 tmux attach -t 名字 2.4查看文件、修改文件…

作者头像 李华
网站建设 2026/2/6 7:30:56

把所有业务都转成 MCP,太傻了!AI Skill 才是正道

MCP(Model Context Protocol)可能火得有些过头了。自从 Anthropic 把这套协议抛出来,不少同行就开始坐不住,仿佛一夜之间,不把自家的业务接口重写成 MCP Server,就拿不到 AI 时代的入场券了。 每隔几年&am…

作者头像 李华
网站建设 2026/2/6 23:01:43

<span class=“js_title_inner“>Python:元类机制</span>

在 Python 的对象模型中,元类机制(metaclass mechanism)并非独立于对象系统的“高级技巧”,而是类对象创建过程的语言级扩展点。它关注的不是“如何使用类”,而是“类本身如何被创建、初始化与组织”。一、什么是元类机…

作者头像 李华
网站建设 2026/2/6 2:37:24

基于时空风险场的道路自动驾驶车辆预测轨迹规划

基于时空风险场的道路自动驾驶车辆预测轨迹规划 下面复现这篇关于自动驾驶轨迹规划的论文《基于时空风险场的道路自动驾驶车辆预测轨迹规划》,实现核心算法。 1. 算法概述 该论文提出了一种基于时空风险势场的预测轨迹规划方法,主要特点是将轨迹生成和风险评估解耦为两个并…

作者头像 李华
网站建设 2026/2/5 12:17:24

PostgreSQL 核心原理:读不阻塞写,写不阻塞读的秘密

文章目录 一、传统锁模型 vs MVCC:为什么需要多版本?1.1 传统锁模型的局限1.2 MVCC 的核心思想1.3 PostgreSQL 中 MVCC 的实现基础:元组头(HeapTupleHeader)1.4 事务快照(Snapshot):…

作者头像 李华