news 2026/6/10 17:38:27

【C++面试题】深拷贝/浅拷贝

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C++面试题】深拷贝/浅拷贝
特性浅拷贝 (Shallow Copy)深拷贝 (Deep Copy)
操作对象仅复制指针变量本身(64位系统通常 8 字节)。复制指针指向的整块内存数据
内存地址两个指针指向同一个地址 (0x1234)。两个指针指向不同的地址 (A指0x1234, B指0x5678)。
数据独立性高度耦合。修改 A 的数据,B 也会变。完全独立。修改 A 的数据,B 不受影响。
速度极快(仅赋值一个整数)。较慢(涉及 malloc/new 和内存搬运)。
主要风险双重释放 (Double Free):如果 A 析构删了内存,B 就成了悬空指针,B 再析构就会崩。内存消耗大:如果对象很大,频繁深拷贝会撑爆内存或拖慢 CPU。
A. 普通数据类型

对于普通数据类型(基础类型如int,double,bool,char以及不包含指针的简单struct/class),深拷贝和浅拷贝没有任何区别。

B. 标准容器 (std::vector,std::string)
  • std::vector<int> b = a;

    • 这是深拷贝b会在堆上申请新空间,把a的元素都拷过去。

  • std::vector<Node*> b = a;

    • 容器本身是新的(深拷贝),但容器里的元素是指针(浅拷贝)。

C. OpenCV 应用 (cv::Mat)
cv::Mat A = cv::imread("img.jpg"); cv::Mat B = A; // 【浅拷贝】B 和 A 共享同一块图像数据。修改 B 的像素,A 也会变。 // OpenCV 内部使用了“引用计数”机制,安全,不会 Double Free。 cv::Mat C = A.clone(); // 【深拷贝】C 拥有独立的图像数据。修改 C,A 不变。
D. 设计原则
  • 全局共享资源:必须浅拷贝

    • 原因:为了保证一致性

    • 实现:使用指针或智能指针 (std::shared_ptr)。

  • 线程私有数据:必须深拷贝

    • 原因:为了保证线程安全数据隔离

    • 实现:显式调用.clone()或拷贝构造。

  • 函数传参:尽量用引用 (const &)

    • 原则:既不要深拷贝(慢),也不要浅拷贝(为了不增加引用计数开销),直接传引用。

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

YOLOv8工业4.0智能制造核心组件

YOLOv8&#xff1a;驱动工业4.0智能视觉的高效引擎 在现代制造工厂的流水线上&#xff0c;每分钟可能有数百个产品经过检测工位。传统基于规则的图像处理方法面对复杂多变的缺陷形态和光照干扰时&#xff0c;常常力不从心——划痕太细、元件太小、背景太杂&#xff0c;稍有变化…

作者头像 李华
网站建设 2026/6/10 14:54:31

YOLOv8预训练模型yolov8n.pt下载与加载技巧

YOLOv8预训练模型yolov8n.pt下载与加载技巧 在智能监控、自动驾驶和工业质检等现实场景中&#xff0c;目标检测的部署效率往往直接决定项目的成败。面对紧迫的开发周期和有限的算力资源&#xff0c;如何快速构建一个稳定、可复现的目标检测系统&#xff1f;答案已经逐渐从“手动…

作者头像 李华
网站建设 2026/6/10 14:49:28

YOLOv8智慧园区安防一体化平台

YOLOv8智慧园区安防一体化平台 在现代智慧园区的日常运营中&#xff0c;安全与效率之间的平衡正面临前所未有的挑战。传统的视频监控系统虽然部署广泛&#xff0c;但本质上仍依赖人工回溯和被动响应——摄像头只是“录像机”&#xff0c;而非“观察者”。当园区面积扩大、出入口…

作者头像 李华
网站建设 2026/6/10 15:47:49

电源适配器开关机时间测试方法详解-纳米软件

电源适配器的开关机时间直接影响电子设备的启动响应速度、待机功耗及使用寿命&#xff0c;是评估适配器性能的关键指标之一。通过标准化测试&#xff0c;可准确获取适配器从触发开关机指令到输出状态稳定 / 关闭的时长&#xff0c;为产品设计优化、质量管控及兼容性验证提供数据…

作者头像 李华
网站建设 2026/5/29 8:28:04

Linux软件包管理:安装卸载软件必备

Linux软件包管理&#xff1a;安装卸载软件必备 在Linux上装软件&#xff0c;不是双击exe那么简单。 今天聊聊Linux软件包管理的基础知识。 两大包管理器 不同Linux发行版用不同的包管理器&#xff1a; apt&#xff1a;Ubuntu、Debianyum/dnf&#xff1a;CentOS、RHEL、Fedora a…

作者头像 李华