当前位置: 首页 > news >正文

【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 &)

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

http://www.jsqmd.com/news/172624/

相关文章:

  • YOLOv8平移、旋转、缩放变换对模型鲁棒性影响
  • Excel数据提取效率低,如何用Dify实现秒级响应?
  • R语言GPT代码修复全解析,掌握这6种模式轻松应对报错
  • YOLOv8开发环境搭建难点解析(基于Linux系统)
  • 深度学习框架YOLOV8模型如何训练水面及河道漂浮物垃圾检测数据集 建立基于深度学习YOLOV8河道水面垃圾检测系统
  • YOLOv8输出结果格式解析:JSON与坐标数组
  • YOLOv8量子计算结合前景预测
  • OpenSpec兼容设计:YOLOv8镜像适配多种硬件算力环境
  • R语言调试效率提升10倍,GPT辅助你不知道的5个秘密
  • 【模型评估不再难】:R语言交叉验证常见错误及6大修复方案
  • 2. Linux 软件包管理
  • YOLOv8内置数据增强组合:Mosaic与Copy-Paste详解
  • BEST 定理
  • ‌预测:量子计算对测试的影响
  • Dify如何完美适配Next.js最新版本:5大核心技巧与避坑指南
  • 在玩转51单片机的世界里,直流电机的调速仿真绝对是一个经典实验。今天我们就来聊聊如何通过滑动变阻器控制电机的转速,顺便分析一下代码和仿真过程
  • 规则、记忆与边界:构建不会重复犯错的智能系统
  • ArcGIS大师之路500技---049状态栏的设置
  • R语言绘图陷阱揭秘(90%新手都踩过的坑)
  • YOLOv8 Discord服务器邀请链接公布
  • Dify 1.11.1安全补丁深度解析(企业级防护升级全指南)
  • YOLOv5用户转型必看:YOLOv8有哪些关键升级点?
  • YOLOv8训练教程:用100个epoch跑通COCO8示例数据集
  • 还在手动分析用户行为?Dify对接Amplitude实现自动化洞察,效率提升80%
  • R语言GPT代码辅助实战(AI赋能调试新范式)
  • YOLOv8智慧园区安防一体化平台
  • 【Dify React 19.2.3 安全更新深度解析】:揭秘此次安全补丁背后的5大关键修复
  • YOLOv8文档翻译计划:支持多语言阅读
  • YOLOv8第三方依赖许可合规检查
  • 还在用旧版Dify?立即升级1.11.1的4个不可忽视的安全理由,黑客已开始行动