【无标题】C++3:拷贝构造以及编译器优化
this指针我们在创建变量时如果名字与类的普通成员方法名字相撞那我们应该如何区分到底是把哪个值赋给谁呢这时候就引出this指针可以区别classTest{public:intnum;// 成员变量voidsetNum(intnum){// this-num类自身的成员变量// num传入的形参局部变量this-numnum;}由此我们引出this指针定义你创建一个类的实例对象电脑会在内存里给它单独划分一块地盘对象调用自己的成员函数时编译器会自动把这个对象的内存地址打包成this偷偷传给成员函数在成员函数内部this就代表 “正在干活的这个对象自己”。总之谁调用这个成员函数this就指向谁。△ this指针专门指向调用该方法的对象拷贝构造咱们在重新构造一个和之前某一个一摸一样的对象时就叫拷贝构造。但是拷贝构造分为浅拷贝与深拷贝。默认拷贝构造视为浅拷贝浅拷贝就例如照着蛋糕 A 的样子复刻一块配料、造型完全一致的新蛋糕 B全程不用重新走一遍基础配料初始化。classPerson{public:intage;// 手动实现默认风格的拷贝构造Person(constPersonp){agep.age;}};intmain(){Personp1(18);// 普通构造造出第一个对象Personp2(p1);// 调用拷贝构造照着p1复制出全新p2return0;} 为什么需要深拷贝呢 浅拷贝只是单纯把指针变量里存的地址原样复制一份。 两个对象的指针指向同一块堆内存 对象 A 释放内存delete对象 B 的指针变成野指针等到 B 析构再次执行delete程序直接崩溃重复释放同一块内存。 深拷贝如下 cpppublic:intage;char*name;// 堆区动态开辟的字符串必须深拷贝Person(constPersonp){agep.age;//自己新开一块堆内存而不是直接复制指针地址namenewchar[strlen(p.name)1];strcpy(name,p.name);}// 析构函数释放堆内存~Person(){delete[]name;}intmain(){Personp1(20,小明) Person p2 p1;return0;}那什么时候要深拷贝呢1… 类内包含手动 new/malloc 在堆上开辟的内存2. 独占资源赋值per1per2看似是赋值其实调用了per1的operator函数//per1per2Personoperator(constPersonp){if(thisp){return*this;//防止自己给自己赋值}delete[]this-name;// 拷贝普通成员this-agep.age;//this-namenewchar[strlen(p.name)1];strcpy(this-name,p.name);// 返回自身引用支持连续赋值 p1p2p3return*this;什么是explicit在未加关键字前会出现隐式转换加完之后写Person p 18; test(20);会报错但是可以// 方式1Personp(18);// 方式2Person pPerson(18);// 方式3test(Person(20));C编译器对临时对象的优化1.使用临时对象拷贝构造同类型新对象临时对象被优化使用构造临时对象的方式直接构造新对象即可例如person per4(Person(z张飞23‘M’))就不会构造临时对象直接构造出来相当于per4“张飞”23‘M’2.但是如果你进行赋值的话那么临时对象不会被优化因为一旦优化就无法对新对象进行赋值PersonGetperson(person per){constchar*nameper.getName();intageper.getAge();charsexper.getSex();PersontmpPer(name,age,sex);returntmpPer;}intmain(){Personper1(x““22”“m”);Person per2;per2Getperson(per1);per2.show;}以上这段代码我们可以理解为从main函数开始分析先进行per1的三个参数构造再进行per2的默认构造然后实参到形参是一个拷贝构造编译器直接优化不再拷贝构造tmpPer生成一个main函数栈上的临时对象然后对per2进行赋值操作PersonGetperson(person per){constchar*nameper.getName();intageper.getAge();charsexper.getSex();PersontmpPer(name,age,sex);returntmpPer;}intmain(){Personper1(x““22”“m”);Person per2Getperson(per1);per2.show;}我们从Person per2Getperson(per1);开始分析本来的顺序Getperson 值接收参数把 per1 拷贝一份得到栈上形参 per在 Getperson 函数自身栈空间里正常构造局部对象 tmpPer调用普通构造函数把 tmpPer 拷贝构造一份放到 main 栈的返回值临时对象再用这个临时对象拷贝构造 main 里的 per2函数退出销毁 tmpPer、形参 per最后析构临时、per1、per2。但是编译器优化时直接就把tmpPer当成per2进行常规构造心得总结本节课主要内容为this指针拷贝构造赋值函数C编译器优化我认为this指针指向被调用方法的对象是一个很重要的点在此之前我一直以为this指针是每个参数都拥有的其次拷贝构造中我认为为什么会出现深拷贝这种问题是很重要的只有知道为什么需要深拷贝我们才能了解深拷贝的底层原理C编译器优化中比较难的我认为是何时临时对象会进行赋值而何时不能够省略临时对象这需要再琢磨琢磨以上包含我这节课所认为重点核心难点以及还未攻克的难题

相关新闻

VSCode配置ESP32 MicroPython开发环境:从零搭建到点灯实战

VSCode配置ESP32 MicroPython开发环境:从零搭建到点灯实战

在嵌入式开发领域,ESP32 凭借其强大的双核处理能力、丰富的无线连接选项(Wi-Fi 和蓝牙)以及极佳的性价比,已成为物联网和智能硬件项目的首选微控制器之一。而 MicroPython 作为一种在微控制器上运行的 Python 3 实现,极…

2026/10/11 2:01:12 阅读更多 →
Sentinel热点参数限流:从原理到实战的完整指南

Sentinel热点参数限流:从原理到实战的完整指南

1. 从一次线上“秒杀”故障说起:为什么需要热点规则?去年双十一大促前,我们团队负责的一个商品秒杀系统在压测时遇到了一个诡异的问题。系统整体QPS(每秒查询率)和CPU使用率都在健康范围内,但RT&#xff08…

2026/10/15 5:32:02 阅读更多 →
Python.二.(三).迭代器和生成器

Python.二.(三).迭代器和生成器

Python 中迭代器的概念?核心结论:可迭代对象(Iterable)实现 __iter__,迭代器(Iterator)实现 __iter__ __next__。迭代器是带状态的惰性求值对象 。我们来看一个🌰:from …

2026/10/13 17:04:44 阅读更多 →

最新新闻

冒险岛WZ格式解析与自定义加密实战指南

冒险岛WZ格式解析与自定义加密实战指南

简介:这是一款面向《冒险岛》游戏开发者、MOD制作者及资深玩家的WZ资源编辑与加密工具集,专为破解、定制和重打包游戏核心资源(如图像、音效、脚本、技能配置)提供完整支持。资源包共34个文件,含17个DLL动态库&#xf…

2026/10/15 19:16:09 阅读更多 →
C罗半场被换下,利雅得胜利10人连进3球逆转

C罗半场被换下,利雅得胜利10人连进3球逆转

利雅得胜利主场,上半场0比2落后,门将早早被罚下。中场休息,主教练把C罗换了下来,转播镜头扫过他的脸,表情不太好看。下半场,没有C罗的利雅得胜利,10个人连进三球,3比2逆转。 同一周&…

2026/10/15 19:16:09 阅读更多 →
分销商城小程序打造高效社交分销与营销增长平台

分销商城小程序打造高效社交分销与营销增长平台

随着移动电商和社交营销的快速发展,传统商城获客成本不断增加,越来越多的企业开始布局分销商城小程序,通过社交分享、会员裂变、营销活动等方式,拓展销售渠道,实现客户资源与商品销量的双重增长。分销商城小程序定制开…

2026/10/15 19:16:08 阅读更多 →
从源头到应用,企业数据质量究竟该如何管控?

从源头到应用,企业数据质量究竟该如何管控?

数字化转型持续推进,数据已经成为企业经营决策、业务分析、系统协同的核心资产,但很多企业始终被数据质量难题困扰:客商信息重复、物料编码不统一、报表口径打架、跨系统数据对不上。不少团队投入了人力、预算做数据治理,却常常陷…

2026/10/15 19:16:08 阅读更多 →
2026年10月山西省联通宽带实测办理全流程避坑攻略

2026年10月山西省联通宽带实测办理全流程避坑攻略

昨天翻出上个月的手机话费单,看着宽带那一栏扣的钱,再看看业主群里邻居吐槽晚上看剧转圈圈,我实在忍不住了。对比了一下账单,我家现在用的宽带一个月大几十,网速却不如隔壁用山西省联通的邻居。为了搞清楚到底怎么回事…

2026/10/15 19:16:08 阅读更多 →
PHP众筹源码系统实战:多模式众筹平台部署与避坑指南

PHP众筹源码系统实战:多模式众筹平台部署与避坑指南

“PHP众筹源码系统”这个关键词,最近在几个站长社群里反复出现。说句实话,我第一次拿到这套源码的时候也没太当回事——市面上叫“众筹系统”的PHP源码一抓一大把,很多就是套个模板、挂个支付按钮就算完事。但真正把这套系统部署起来、跑完一…

2026/10/15 19:15:08 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →