【C++】拷贝构造函数、赋值重载函数、深拷贝及浅拷贝 模拟实现顺序栈和环形队列的问题及理解
拷贝构造函数用已有对象初始化新对象。Person p2(p1) Person p2 p1赋值运算符将已有对象赋值给另一个已存在的对象 p1p2浅拷贝只复制指针值共享内存 默认的拷贝/赋值行为深拷贝复制指针指向的内容独立内存 需要自定义实现总结只要类中有动态分配的内存new就必须实现·拷贝构造函数深拷贝 创建新的对象·赋值运算符重载深拷贝 给已存在的对象赋值拷贝构造vs赋值重载// 拷贝构造创建新对象SeqStack s1;SeqStack s2 s1;// ←拷贝构造s2是新对象SeqStack s3(s1);// ←拷贝构造s3是新对象// 赋值重载已存在的对象赋值SeqStack s1;SeqStack s2;// s2已经存在s2 s1;// ←赋值重载s2已存在// 关键区别// 拷贝构造不需要释放旧资源新对象没有// 赋值重载需要释放旧资源对象已有资源·析构函数释放资源浅拷贝Egclass Person { public: Person(const char* name, int age) { this-name new char[strlen(name) 1]; strcpy(this-name, name); this-age age; } ~Person() { delete[] this-name; // 释放内存 } private: char* name; int age; }; int main() { Person per1(赵云, 23); Person per2(per1); // 使用默认拷贝构造函数浅拷贝 // 问题per1和per2的name指针指向同一块内存 // 析构时同一块内存被释放两次 → 程序崩溃 return 0; }深拷贝Egclass Person { public: // 构造函数 Person(const char* name, int age, char sex) { this-name new char[strlen(name) 1]; strcpy(this-name, name); this-age age; this-sex sex; } // 拷贝构造函数深拷贝 // 参数必须是引用否则会无限递归 Person(const Person rhs) { cout Person(const Person rhs) endl; // 重新开辟独立的内存空间 this-name new char[strlen(rhs.name) 1]; strcpy(this-name, rhs.name); this-age rhs.age; this-sex rhs.sex; } // 析构函数 ~Person() { delete[] this-name; this-name nullptr; } private: char* name; int age; char sex; }; int main() { Person per1(赵云, 23, M); Person per2(per1); // 调用拷贝构造函数深拷贝 // per1和per2的name指向不同的内存互不影响 return 0; }模拟实现顺序栈和环形队列遇到的问题总结模拟实现堆mTop始终指向栈顶元素的下一个元素因此出栈直接mTop--就是指向栈顶元素假装此位置为空没有元素伪删。判满bool full() { return mTop mSize; } // 元素个数 容量因为mTop刚好指向下一个元素所以数值上可以和mSize相比。3.模拟实现和环形队列front_指向队头元素第一个有效元素rear_指向队尾的下一个位置下一个要放的位置4.环形移动// 入队rear_ 环形后移 void push(int data) { queue_[rear_] data; rear_ (rear_ 1) % size_; // 取模实现环形 } // 出队front_ 环形后移 void pop() { front_ (front_ 1) % size_; // 取模实现环形 }5.判满(rear_ 1) % size_ front_浪费一个空间的原因是区分空和满。6.扩容时为什么 rear_ count因为扩容前队列的环形的 rear可能在front前顺序不对而扩容之后赋值过程中count的增加suoyinindex从front开始此时队列变成顺序的因此rear刚好在count的位置。

相关新闻

开源PLC编程完整指南:用OpenPLC Editor免费搞定PLC开发与调试

开源PLC编程完整指南:用OpenPLC Editor免费搞定PLC开发与调试

开源PLC编程完整指南:用OpenPLC Editor免费搞定PLC开发与调试 【免费下载链接】OpenPLC_Editor 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPLC_Editor 如果你正在寻找一套免费又专业的开源PLC编程工具,OpenPLC Editor值得认真了解。这款…

2026/10/18 21:39:33 阅读更多 →
MySQL SQL 风险拦截:AST 规则、观察模式和可回退阻断

MySQL SQL 风险拦截:AST 规则、观察模式和可回退阻断

MySQL SQL 风险拦截:AST 规则、观察模式和可回退阻断 SQL 风险控制是缩小影响面,不是用 AST 规则消灭慢 SQL。确定性高的无条件更新可以阻断,其余风险先观察、限流并结合执行计划与统计信息判断。 先在网关做可解释的预检 对无条件 UPDATE、D…

2026/10/17 9:23:42 阅读更多 →
React 独立产品止损:错误边界、开关与回滚

React 独立产品止损:错误边界、开关与回滚

React 独立产品止损:错误边界、开关与回滚 React 独立产品没有专职运维,更需要小而可靠的止损面。错误边界保住页面,远程开关关闭问题功能,回滚恢复旧版本。发布前要实际走一遍这三条路径。 1. 全栈架构下的两条隐蔽雪崩链路 这类…

2026/10/17 9:23:59 阅读更多 →

最新新闻

context-mode:为命令行工具设计可复现的上下文状态管理层

context-mode:为命令行工具设计可复现的上下文状态管理层

你有没有遇到过这种场景:打开终端,先export一串环境变量,再cd到项目目录,然后才开始真正干活。如果只是顺手敲两下还好,但如果你同时在维护三五个项目,每个项目还对应不同的 API 地址、不同的分支策略、不同…

2026/10/20 3:52:15 阅读更多 →
Linux数据盘格式化实战:设备确认、分区、mkfs与挂载避坑指南

Linux数据盘格式化实战:设备确认、分区、mkfs与挂载避坑指南

1. 格式化前先搞清楚这几件事接到一台机器,客户说数据盘满了,想要重新格式化,我第一句话永远都是:数据备份了吗?这不是客套,是血泪教训。Linux下格式化硬盘这个操作,新手看起来就是一条mkfs.ext…

2026/10/20 3:52:15 阅读更多 →
多传感器数据分析:从nuScenes坐标系对齐到BEV特征构建全流程

多传感器数据分析:从nuScenes坐标系对齐到BEV特征构建全流程

简介:面向自动驾驶研究与工程实践,这份资源以nuScenes多模态数据集为核心,提供基于Python的解析与可视化代码,适合需要处理LiDAR、摄像头、毫米波雷达等传感器数据的研究者与开发者。压缩包共8个文件,以Python脚本为主…

2026/10/20 3:52:15 阅读更多 →
Kubernetes四大节点组件原理与故障排查指南

Kubernetes四大节点组件原理与故障排查指南

1. 什么是Kubernetes节点组件?它到底在解决什么问题?你可能已经听过“K8s是云原生时代的操作系统”这种说法,但真正用过的人会发现:这句话不是比喻,而是事实——只不过这个“操作系统”不装在你的笔记本里,…

2026/10/20 3:52:15 阅读更多 →
构建个人技能体系:从清单到矩阵的迭代实战

构建个人技能体系:从清单到矩阵的迭代实战

“skills”这个标题看上去太简单了,简单到一眼扫过去容易直接略过。但你真把它当成一个项目来对待的时候,它可能是很多人一直想做、却迟迟没动手做对的那件事:把自己的技能体系盘清楚、搭起来、用起来。我不是在讲一个概念,我是把…

2026/10/20 3:52:15 阅读更多 →
本地推理实战:用llama.cpp与ollama部署LFM2.5-1.2B小模型

本地推理实战:用llama.cpp与ollama部署LFM2.5-1.2B小模型

1. 上手前的心里话:为什么大家都盯着小模型本地推理最近圈子里聊本地大模型,基本绕不开两个东西:llama.cpp 和 ollama。而我这段时间一直在折腾的主角,是 LFM2.5-1.2B 这个模型。别看它只有 1.2B 参数,实测下来每秒能跑…

2026/10/20 3:51:14 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →