上篇聊了构造函数和析构函数,今天接着讲它的"兄弟"——拷贝构造和赋值。这个话题在面试里出现频率很高。而且很多人不是不知道概念,而是在具体场景下判断不出该用浅拷贝还是深拷贝。讲个我自己的教训。刚工作不久,写了个传感器数据管理的类。内部用了一个指针数组存数据。我嫌麻烦,没写拷贝构造函数,觉得编译器自动生成的够用了。结果程序跑着跑着就崩了。排查了半天,发现是vector扩容的时候,拷贝了对象,但编译器生成的拷贝构造函数只做了浅拷贝——指针复制了一份,两个对象指向同一块内存。一个对象析构的时候把内存释放了,另一个对象还在用这块内存,直接野指针。从那以后,我对拷贝构造和赋值再也不敢偷懒。拷贝构造函数:什么时候调用拷贝构造函数在三种情况下被调用:第一,用一个对象初始化另一个对象。Sensor s1; Sensor s2 = s1; // 调用拷贝构造 Sensor s3(s1); // 调用拷贝构造第二,函数参数是值传递的对象。void processSensor(Sensor s) { // 值传递,调用拷贝构造 // 处理s } Sensor s1; processSensor(s1); // s1被拷贝一份传给s第三,函数返回一个局部对象(有些编译器会做返回值优化,省略拷贝)Sensor createSensor() { Sensor s; return s; // 可能调用拷贝构造(也可能被RVO优化掉
拷贝构造与赋值:浅拷贝vs深拷贝,面试里最容易踩的坑
上篇聊了构造函数和析构函数,今天接着讲它的"兄弟"——拷贝构造和赋值。这个话题在面试里出现频率很高。而且很多人不是不知道概念,而是在具体场景下判断不出该用浅拷贝还是深拷贝。讲个我自己的教训。刚工作不久,写了个传感器数据管理的类。内部用了一个指针数组存数据。我嫌麻烦,没写拷贝构造函数,觉得编译器自动生成的够用了。结果程序跑着跑着就崩了。排查了半天,发现是vector扩容的时候,拷贝了对象,但编译器生成的拷贝构造函数只做了浅拷贝——指针复制了一份,两个对象指向同一块内存。一个对象析构的时候把内存释放了,另一个对象还在用这块内存,直接野指针。从那以后,我对拷贝构造和赋值再也不敢偷懒。拷贝构造函数:什么时候调用拷贝构造函数在三种情况下被调用:第一,用一个对象初始化另一个对象。Sensor s1; Sensor s2 = s1; // 调用拷贝构造 Sensor s3(s1); // 调用拷贝构造第二,函数参数是值传递的对象。void processSensor(Sensor s) { // 值传递,调用拷贝构造 // 处理s } Sensor s1; processSensor(s1); // s1被拷贝一份传给s第三,函数返回一个局部对象(有些编译器会做返回值优化,省略拷贝)Sensor createSensor() { Sensor s; return s; // 可能调用拷贝构造(也可能被RVO优化掉
相关文章
【微信小程序×Cursor双引擎协同】:打通WXML/JS/JSON/AI生成闭环的5层架构设计(腾讯内部分享精简版)
更多请点击: https://kaifayun.com 第一章:微信小程序Cursor双引擎协同的架构全景图 微信小程序与 Cursor 的深度协同并非简单工具叠加,而是构建在“前端轻量交互 AI 原生开发流”双范式之上的新型协作架构。该架构以小程序原生渲染能力为…
DeepSeek接入Claude Code:3分钟配置AI编程助手
今天来看一个实用的技术方案:如何将 DeepSeek 接入 Claude Code,让 AI 帮你写代码。这个组合最大的优势是不需要特殊网络环境,直接在国内网络环境下就能使用,而且配置过程简单,3分钟就能搞定。Claude Code 是一个运行在…
Hermes Agent MOA功能解析:多模型协作提升AI智能体性能
在AI智能体开发领域,单一模型的能力瓶颈一直是开发者面临的挑战。当处理复杂任务时,单个模型往往难以兼顾深度分析和全面视角,而Hermes Agent最新推出的Mixture of Agents(MOA)功能正是为了解决这一痛点。本文将深入解…
【架构演进解析】从Attention到Transformer:为何“注意力”足以重塑序列建模
1. 从RNN到Attention:序列建模的瓶颈突破2017年之前,循环神经网络(RNN)和长短期记忆网络(LSTM)是处理序列数据的绝对主力。想象你正在阅读一本小说——传统RNN就像逐字阅读的读者,必须按顺序处理…
【生产力环境】从零打造媲美macOS的Ubuntu KDE桌面开发环境
1. 系统安装与基础配置 第一次接触Ubuntu KDE时,我被它高度可定制的特性惊艳到了。相比GNOME,KDE Plasma提供了更丰富的桌面自定义选项,这让我们能够打造出接近macOS的视觉体验和工作流。建议选择Ubuntu 22.04 LTS或更新版本作为基础系统&…
C++并发编程:深入理解std::future异步任务与结果获取
1. 项目概述:为什么我们需要std::future?在C的世界里,尤其是当你从基础语法迈向构建高性能、响应迅速的实际应用时,多线程编程是绕不开的一道坎。但传统的多线程模型,比如直接使用std::thread,常常伴随着一…
数据库系统实验七:从零到一掌握存储过程与游标编程实战
1. 存储过程基础入门 存储过程是数据库编程中最实用的功能之一,它就像数据库里的"小程序",把常用的SQL操作封装起来。我第一次接触存储过程时,感觉它特别像编程语言中的函数——可以传参数、有变量、能写逻辑判断,还能返…
GO_面向对象_方法
一、Go 方法核心概念1. 方法本质方法本质是函数,但必须和特定类型绑定(区别于普通函数),是 Go 实现面向对象封装的核心手段。2. 函数 vs 方法 语法对比go// 1. 普通函数(无类型绑定) func 函数名(参数) 返回…
纯CSS无缝跑马灯进阶:从原理到实战,打造横竖双向无限轮播
1. 跑马灯效果的前世今生跑马灯效果最早来源于传统霓虹灯广告牌,通过灯光的移动吸引路人注意。在网页设计中,这种动态展示方式被广泛用于新闻头条、促销广告等需要突出显示的内容区域。相比传统的静态展示,跑马灯能有效提升30%以上的用户注意…
元初混沌物理 108 篇 第八十八篇星气落地物化定则
89. 星气落地物化定则一、核心总纲七星依托引力气运沿六合时空轨道向下传导,穿透天地时空结界,沉降至人域、地域地层,转化为地表五行气源,驱动山川、草木、流体、矿质持续演化,完整界定星气落地物化定则,打…
北京华恒智信破解国企竞聘能上不能下成功案例
【客户行业】文旅行业【问题类型】人才培养【客户背景】随着国家住建部对产业分类标准的不断完善,特色小镇作为其中一类标准受到越来越多的关注。在文旅行业蓬勃发展的大背景下,国家提倡特色小镇向“强调文化IP”方向发展,倡导跨界融合&#…
STM32与ICM-42605实现6DOF姿态解算实战
1. 项目背景与核心需求在智能硬件和物联网设备快速发展的今天,精确追踪物体在三维空间中的运动和方向成为了许多应用场景的基础需求。无论是无人机飞控、VR/AR设备姿态感知,还是工业自动化中的运动检测,都需要高精度的6自由度(6DO…
MQ-2 烟雾传感器 ESP32-S3 驱动实战:ADC 读取与阈值校准 3 步完成
MQ-2 烟雾传感器 ESP32-S3 驱动实战:ADC 读取与阈值校准 3 步完成在智能家居和工业安全监测领域,烟雾检测是一个至关重要的环节。MQ-2 作为一款高性价比的半导体烟雾传感器,因其对多种可燃气体(如液化气、丙烷、氢气等)…
SPEC CPU 2006 v1.0.1 基准测试实战:ARM/X86/MIPS 三平台配置与 3 轮测试结果解读
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
每天60s读懂世界:2026年7月11日重点要闻解读
🔥 个人主页:杨利杰YJlio❄️ 个人专栏:《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》《WINDOWS教程》 《Windows PowerShell 实战》 《人工智能实战合集》《超简单:用Python让Excel飞起来》🌟…
FAE放射组学分析工具:医学影像特征探索的完整解决方案
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
0.69B参数实现中文多模态AI:揭秘Qwen3-SmVL模型融合技术的完整实战指南
0.69B参数实现中文多模态AI:揭秘Qwen3-SmVL模型融合技术的完整实战指南 【免费下载链接】happy-llm 📚 从零开始构建大模型 项目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm 还在为大型多模态模型动辄数十亿参数、显存占用高而烦恼&…
解锁AMD Ryzen处理器性能潜力的SMU调试神器:从新手到专家的完整指南
解锁AMD Ryzen处理器性能潜力的SMU调试神器:从新手到专家的完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址…