c++取经之路(其五)——类和对象拷贝构造函数

概念:拷贝构造函数,只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。

特征:


1. 拷贝构造函数是构造函数的一个重载形式

如:


2. 拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。

造成原因(自己画的图):


3. 若未显式定义,编译器会生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。

我们来看这个代码:

class Stack 
{
public:Stack(int x=4);//Stack(const Stack& st);void StackPush(int x);~Stack();
private:int* _a;int _top;int _capacity;
};Stack::Stack(int x)
{_a=(int*)malloc(sizeof(int) * x);_top = 0;_capacity = 4;
}void Stack::StackPush(int x)
{_a[_top++] = x;
}Stack::~Stack()
{free(_a);_a = nullptr;_top = 0;_capacity = 0;
}int main(){Stack st1;st1.StackPush(1);Stack st2 = st1;return 0;}

如果我们没定义这个函数,编译器自动生成的会完成浅拷贝。

注意:1.他们指针指向的地址都相同,这肯定是不行的,毕竟析构函数会free两次相同的空间。

2.所以我们就需要自己完成一个深拷贝,在这就不去实现了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 检查更新

概览 在uniapp中检查并更新应用,可以使用uni-app自带的更新机制。以下是一个简单的示例代码,用于在应用启动时检查更新: // 在App.vue或者其他合适的地方调用 onLaunch: function() {// 当uni-app初始化完成时执行// 判断平台const platfor…

C++: 类和对象(下)

目录 一、日期类 二、初始化列表 三、static成员 四、友元 五、内部类 一、日期类 日期类主要用于深化对六大默认成员函数和运算符重载的理解 日期类需要实现方法有: 1.构造函数 2.拷贝构造函数 3.赋值运算符重载 4.运算符重载 5.!运算符重载 6.运算符…

基于springboot实现中小型医院网站管理系统【项目源码+论文说明】

基于springboot实现中小型医院网站管理系统演示 摘要 本基于Spring Boot的中小型医院网站设计目标是实现用户网络预约挂号的功能,同时提高医院管理效率,更好的为广大用户服务。 本文重点阐述了中小型医院网站的开发过程,以实际运用为开发背…

【嵌入式】让人又爱又恨的“指针”

调试bug遇到了野指针,无语凝噎,记录 【嵌入式】让人又爱又恨的“指针” 1.我到底是个啥?1.1【解释一下】1.2【谨慎使用】 2.毒舌“野指针” 1.我到底是个啥? 1.1【解释一下】 回顾一下, 什么是指针?指针在…

自定义注解加反射实现数据类型转换

概述 通过ORM框架从数据库中查询出的实体对象,大部分情况下可能与前端页面展示的数据结果类型略有不同,比如:后端定义的店铺实体类(Shop)中有店铺状态:0-正常,1-未审核,2-违规,3-倒闭,在做脱敏的处理下需要…

[amateurs CTF 2024] crypto/pilfer-techies

这题费了几天,昨天写到11点半才基本完成程序,需要交互2000多,远程太慢了交互两次就断掉了,反正本地能成,程序逻辑上正确了。小鸡块也写了WP了等写完马上去看小鸡块神的思路。也许有的问题很大呢? 先简单看下题: #!/usr/local/bi…

二分查找基本模版

二分&#xff1a;通过不断取中点&#xff0c;重复将一个区域一份为二&#xff0c;使其不断缩小范围直至找到答案 本质&#xff1a;性质/边界&#xff0c;而不是单调性 时间复杂度&#xff1a;O(logN) 代码模版&#xff1a; //找到的是最左侧的数值点 while(l < r){ //尽…

[数据结构]——二叉树——堆的实现

1. 堆的概念及结构 如果有一个关键码的集合K { &#xff0c; &#xff0c; &#xff0c;…&#xff0c; }&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;并满足&#xff1a; < 且 < ( > 且 > ) i 0&#xff0c;1&…

前端面试题(1)

1&#xff0c;CSS盒子模型 CSS的盒模型有两种&#xff1a;标准盒模型&#xff0c;IE盒模型。IE盒模型&#xff0c;其中content包含了内边距padding和边框border。盒子的实际宽度 contentmargin。标准盒模型&#xff0c;盒子的实际宽度 content(内容)padding(内边距)border(边…

rocky9 yum 安装与配置MySQL8

1.前置条件&#xff1a; 把yum包更新到最新 [rootlocalhost ~]# yum update 查看系统中是否已安装 MySQL 服务 rpm -qa|grep mysql 如果有安装mysql,则需要先卸载之前安装的mysql&#xff1a;yum -y remove mysql 然后再查看mysql是否都卸载完成,如果还有没卸载完成的&am…

小程序开发SSL证书下载和安装

在开发小程序时&#xff0c;确保数据的安全传输至关重要&#xff0c;而实现这一目标的关键在于正确获取与安装SSL证书。以下详细介绍了从获取到安装SSL证书的完整流程&#xff0c;以助您为小程序构建可靠的加密通信环境。 一、小程序SSL证书类型选择&#xff1a; 域名验证型D…

创新指南|全球需求低迷中国企业出海趋势洞察和创新机会

对于企业出海来说&#xff0c;第一步判断趋势非常重要&#xff0c;这甚至事关企业生死。比如十年前的2014年&#xff0c;中国最大的两家电商平台阿里和京东成功IPO&#xff08;上市&#xff09;后&#xff0c;认为接下来最大的机会在于中国市场的消费升级。与阿里、京东不同&am…

TypeScript基础语法

这里写自定义目录标题 变量条件控制循环函数类和接口模块开发 变量 TypeScript在JavaScript的基础上加入了静态类型检查功能&#xff0c;因此每一个变量都有固定的数据类型。 let msg: string hello worldlet 声明变量的关键字&#xff0c; const 则代表常量 msg 变量名称 &…

Linux:软件包管理器 - yum

Linux&#xff1a;软件包管理器 - yum Linux的软件安装方式源代码安装rpm包安装yum安装 yum三板斧yum listyum installyum remove yum生态yum源 Linux的软件安装方式 源代码安装 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序 源代码安…

git知识

如何将develop分支合并到master分支 #简单版 git checkout master git pull origin master git merge origin/develop # 解决可能的冲突并提交 git push origin master#复杂版 git checkout master # 拉取远程 master 分支的最新代码并合并到本地 git pull origin master # 拉…

新时代·高质量·硬道理丨开放的大门越开越大、开放的水平越来越高

新时代下&#xff0c;中国坚定不移地实施扩大高水平对外开放战略&#xff0c;致力于构建更高层次、更宽领域的开放型经济体系。以下是对新时代高质量硬道理这一主题下&#xff0c;中国开放大门越开越大、开放水平越来越高的几个关键点分析&#xff1a; 全方位开放格局 政府工…

YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

计算机基础知识-第7章-程序的本质(2)——算法与数据结构概论

一、算法数据结构程序 提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯沃思&#xff08;Niklaus Wirth&#xff09;由于发明了多种影响深远的程序设计语言&#xff0c;并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞…

Java——测试相关

1、测试的常用方法 单元测试&#xff1a;针对软件中最小可测试单元进行的测试&#xff0c;如类、方法等。功能测试&#xff1a;检查软件的各项功能是否按照需求规格书执行&#xff0c;通常包括正常功能、边界情况和异常情况的测试。性能测试&#xff1a;检查软件的速度、响应时…

【Linux杂货铺】文件系统

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 硬盘 &#x1f4c2; 物理结构 &#x1f4c2; 存储结构 &#x1f4c2; CHS定址法 &#x1f4c2; 操作系统对硬盘的管理和抽象 &#x1f4c1; 文件系统 &#x1f4c2; 分区 &#x1f4c2; 分组 &#x1f4c2; inode号 分配…