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

软件工程学习日志2025.11.4

🌟 主题:C++中的资源管理与克隆技术

  1. 今日学习目标

今天重点研究C++中的动态内存管理和对象克隆技术,通过实现一个完整的向量类来深入理解:
• 动态内存的申请与释放

• 浅克隆与深克隆的实现原理

• 两种克隆方式的适用场景比较

  1. 核心代码实现

2.1 向量类的基本结构

class Vector {
private:
double* data; // 动态数组指针
int size; // 向量大小

public:
// 构造函数系列
Vector(); // 默认构造
Vector(int size); // 指定大小构造
Vector(const Vector& other); // 拷贝构造(深拷贝)
Vector(const Vector& other, bool deepCopy); // 克隆构造

// 克隆方法
Vector shallowClone() const;        // 浅克隆
Vector deepClone() const;           // 深克隆// 其他功能方法...

};

2.2 关键实现细节

深克隆构造函数:
Vector(const Vector& other, bool deepCopy) : size(other.size) {
if (deepCopy) {
// 分配新内存并复制数据
data = new double[other.size];
memcpy(data, other.data, other.size * sizeof(double));
} else {
// 共享数据指针
data = other.data;
}
}

  1. 浅克隆 vs 深克隆:本质区别

3.1 内存布局对比

浅克隆(共享内存):
对象A [data: 0x1000] ───┐
├─→ [1.0, 2.0, 3.0]
对象B [data: 0x1000] ───┘

深克隆(独立内存):
对象A [data: 0x1000] ──→ [1.0, 2.0, 3.0]
对象B [data: 0x2000] ──→ [1.0, 2.0, 3.0]

3.2 核心差异总结表

特性 浅克隆 深克隆

内存占用 少(共享数据) 多(独立副本)

创建速度 快(仅复制指针) 慢(复制所有数据)

数据安全性 低(相互影响) 高(完全隔离)

适用场景 只读访问、临时使用 需要独立修改

  1. 实际测试演示

4.1 测试代码片段

void testClones() {
Vector original(3);
original.setValue(0, 10.0);

Vector shallow = original.shallowClone();
Vector deep = original.deepClone();// 修改原始对象
original.setValue(0, 99.0);cout << "原始向量: " << original.getValue(0) << endl;  // 输出 99.0
cout << "浅克隆: " << shallow.getValue(0) << endl;    // 输出 99.0(受影响!)
cout << "深克隆: " << deep.getValue(0) << endl;       // 输出 10.0(不受影响)

}

4.2 运行结果分析

原始向量第一个元素: 99
浅克隆第一个元素: 99 ← 值被改变!
深克隆第一个元素: 10 ← 保持原值

指针地址比较:
原始向量: 0x1000
浅克隆: 0x1000 ← 地址相同
深克隆: 0x2000 ← 地址不同

  1. 深度思考

5.1 为什么需要两种克隆方式?

浅克隆的优势:
• 创建速度快,适合大规模对象复制

• 内存效率高,适合只读场景

• 可以实现数据共享机制

深克隆的必要性:
• 数据安全性和独立性

• 避免悬空指针问题

• 符合值语义的期望

5.2 实际应用场景

使用浅克隆的情况:
• 函数参数传递(避免不必要的复制)

• 临时对象处理

• 只读数据视图

使用深克隆的情况:
• 需要独立修改的对象副本

• 线程安全的数据处理

• 持久化数据存储

  1. 编程规范实践

在今天的学习中,特别注意了以下规范:

6.1 资源管理

• RAII原则:构造函数申请资源,析构函数释放资源

• 异常安全:使用try-catch处理边界情况

6.2 代码可读性

• 清晰的注释说明

• 有意义的命名规范

• 合理的函数分组

6.3 内存安全

• 防止内存泄漏

• 避免悬空指针

• 检查自赋值情况

  1. 今日收获总结

  2. 技术理解:深刻理解了浅克隆和深克隆的内在机制和适用场景

  3. 实践能力:通过完整实现加深了对C++动态内存管理的掌握

  4. 设计思维:学会了根据具体需求选择合适的克隆策略

  5. 明日学习计划
    研究C++11的移动语义和右值引用

实现带有移动构造函数的向量类

比较拷贝与移动的性能差异

💡 每日箴言

"理解内存管理是成为高级C++程序员的关键一步。浅克隆与深克隆的选择体现了在性能与安全之间的权衡艺术。"

今日编码时长: 3小时
代码行数: 约200行
掌握程度: ✅ 熟练掌握

http://www.zskr.cn/news/40018.html

相关文章:

  • go语言访问新浪股票
  • Hugging Face的基础使用
  • 2025上海SAT线上培训机构推荐:线上课程首选“无老师国际教育”
  • Java基础加强13-集合框架、Stream流 - 指南
  • 高级语言程序第三次作业 - 102300317
  • Scaling Law至现有AI即将跌落神坛?AI大模型的“增长神话”是否正在崩塌-上篇 - 实践
  • The 2024 ICPC Asia Nanjing Regional Contest (The 3rd Universal Cup. Stage 16: Nanjing) 题解
  • 完整教程:四大名著智能可视化推演平台
  • 2025年靠谱的气体探测器专业厂家推荐,气体探测器企业全解析
  • 2025年重庆正宗陈麻花品牌口碑排名:陈建平麻花客户评价如何、性价比怎么样、价格合理吗全解析
  • Introduction to Microsoft Visual C++/MFC
  • 收藏!计算机领域除顶会外,这6大核心期刊你绝不能错过
  • 2025年沈阳编程机构权威推荐榜单:spike编程/scratch编程/python编程源头机构精选
  • Gitlab通过Token生成的用户怎么删除
  • Prometheus监控系统安装
  • 2025年诚信的PU线条厂家TOP5推荐,PU线条厂家全解析
  • 2025年代办注册公司哪家口碑好?代办注册公司找哪家?
  • 2025 年散热器厂家最新推荐榜:涵盖电子 / 插片 / 型材 / 铲齿 / 新能源等多品类,权威测评精选实力企业
  • 2025 年过滤器厂家最新推荐榜单:品牌综合实力测评发布,五大优质企业脱颖而出润滑油过滤器/自清洗过滤器/全自动除污过滤器/双联过滤器/烛式过滤器厂家推荐
  • docker学习笔记详记 - 教程
  • 浏览器共享存储导致身份标识冲突
  • 2025数证杯初赛
  • Mybatisplus 如何将已经有值的字段设置为空值null
  • 2025 年上海商用净水器租赁公司最新推荐榜,技术实力与市场口碑深度解析,助力精准选品工厂,事业单位,办公净水器租赁企业
  • 2025年尼龙拉链供货厂家权威推荐榜单:树脂拉链/金属拉链/隐形拉链源头厂家精选
  • 详细介绍:MySQL主从复制:数据同步实战指南
  • wzy
  • 分享一个自动化进行Oracle 重做日志组管理的脚本
  • 强化学习值函数与策略搜索两种方法对比和疑问解读
  • 2025qwb 线上赛wp