【C++】拷贝构造函数、赋值重载函数、深拷贝及浅拷贝 模拟实现顺序栈和环形队列的问题及理解

发布时间:2026/10/6 8:37:47

【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的位置。
延伸阅读

更多相关文章

2026/10/6 8:37:41

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

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

2026/10/4 20:01:39

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

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

2026/9/27 9:37:03

AI早报技术架构解析:从信息聚合到智能知识伙伴的演进

1. 从“AI早报”看信息获取范式的变迁 每天早上,当大多数人还在为通勤路上的拥堵或第一杯咖啡的提神效果而烦恼时,一个由算法驱动的信息世界已经悄然完成了新一轮的迭代与分发。这就是“AI早报”——一个看似简单的概念,背后却折射出我们获取…

2026/10/6 8:33:44

脑卒中预测模型实战:从CSV清洗到SHAP可解释性全流程

简介:面向医疗数据分类入门者的一套完整中风预测项目,采用Jupyter Notebook实现,基于Kaggle公开数据,按性别、年龄、疾病史与吸烟状况等特征预测中风风险,并以F1分数与AUC均达到1.0为优化目标,适合学习特征…

2026/10/6 8:33:44

PyTorch眼睛疾病分类数据集训练:验证集划分与类别不平衡实战指南

简介:眼睛疾病分类数据集是一份可直接用于图像分类任务的中小型医学影像资源,包含白内障、青光眼、正常、视网膜疾病四个类别,适合临床筛查模型练手、课程实验或YOLOv5分类项目。数据按train和test目录整理,训练集481张、测试集12…

2026/10/6 8:33:44

AI部署≠成熟部署:企业AI落地的关键环节与工程实践

1. 从“喧嚣的投入”到“冷静的落地”这几年AI投资的热度有目共睹,从大语言模型到多模态应用,从各类AI Agent到企业私有化部署,几乎每个季度都有新的技术热点冒出来。企业的预算表里也越来越多地出现“AI建设”、“大模型应用”、“智能体开发”这些条目。但与此同时,行业里也有…

2026/10/6 8:33:44

临时文件自动化清理:从脚本到容器环境的完整方案

先说点实在话。临时文件这东西,几乎每个用电脑的人都会碰到,但真正把它当回事的人不多。我曾经在一台测试服务器上见过 /tmp 目录里堆了接近 30GB 的垃圾,里面全是各种安装包残留、编译中间产物和半年前的日志切片。更麻烦的是,这…

2026/10/6 8:28:44

计算机网络学习与实战:从分层模型到故障排查

1. 为什么计算机网络是“人人必修”的底层课 说实话,我见过太多人把计算机网络学成了“背完就忘”的科目。期末能默写TCP三次握手,但Wireshark抓个包看不懂;能说出OSI七层模型,但公司网络一卡就只会重启路由器;简历上写…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/6 4:01:51

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/5 17:38:27

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

2026/10/6 0:03:23

MR25H40CDF+STM32F031C6工业级高可靠数据存储方案

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的 PLC 控制柜里、在风电变流器的散热片背面、在矿井监测终端的金属外壳下,你经常能看到一块指甲盖大小的黑色芯片——它既不是 Flash,也不是…

2026/10/6 0:03:23

MRAM+STM32工业断电数据保全实战指南

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的PLC柜里、在野外无人值守的环境监测终端里、在高速运转的包装机控制板上,你经常能看到一块指甲盖大小的黑色芯片,旁边贴着“MR25H40CDF”丝…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑