【C++入门】深拷贝和浅拷贝详解

2023-10-31

1、深拷贝和浅拷贝

(1)当我们对复杂类型(结构体或者类)的对象进行初始化时,如果将同类型的对象A赋值给同类型的对象B,此时就涉及深拷贝和浅拷贝的问题;
(2)如何定义拷贝的深和浅:浅拷贝就是把类/结构体的变量原封不动的赋值,不考虑指针变量;深拷贝就是在赋值时会对指针变量做处理;
总结:对象拷贝时,对指针变量做处理的是深拷贝,不对指针变量做处理的是浅拷贝;

2、示例代码

class Person{
public:
	 string *name;	//姓名,是一个指针变量
    int age;			//年龄
    int gender;		//性别:0表示男,1表示女
};

Person A;
A.name ="linux";
A.age=27;
A.gender = 1;

Person B = A;

3、浅拷贝的情况

在这里插入图片描述

浅拷贝就是把类的变量值原封不对的复制过去,指针变量和普通变量没有任何区别;浅拷贝的缺陷:
(1)当类的成员变量没有指针变量时,浅拷贝是没有问题的;
(2)如果类中存在指针变量,浅拷贝就会出现问题。比如上面B在拷贝A时,将A.name的值原封不对拷贝过来,导致B.name指向同一块内存,但是那块内存是A申请的,A在使用时不会考虑B,就可能存在A将内存释放掉但是B不知道,B仍然在使用那块内存,此时就会出错;

4、深拷贝的情况

在这里插入图片描述

(1)对指针变量做特殊处理,申请一块同样大小的内存,然后把A.name的内容拷贝过来;
总结:类的成员变量有指针变量时用深拷贝,其余情况用浅拷贝;

5、推荐

我会在C++专栏持续根据更新C++相关的知识点,这里也给大家推荐一款学习C++的神器,我也是在用这一款神器在学习C++。
链接:学习神器跳转
如果你是想入门C++这门语言或者是找C++岗位的工作,都推荐你试试这个网站,里面有针对C++知识点的选择题、编程题,更有C++岗位的面试题
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++入门】深拷贝和浅拷贝详解 的相关文章

  • 无法使用 rtools40 和 R 4.0 构建 RDCOMClient

    不久前 我创建了 RDCOMClient 包的一个分支 以使其与 R 3 6 一起工作 https github com dkyleward RDCOMClient https github com dkyleward RDCOMClien
  • 如何在 opencv 3.0 Beta 中从文件读取 UMat?

    我想用UMat所以我的代码可以使用 OpenCL OpenCV 3 0 0 Beta 在 GPU 和 CPU 上运行 但我找不到将图像文件读入的方法UMat或转换一个Mat to UMat 如何将图像读入UMat 样品用于Mat to UM
  • 创建文件并使用内存流保存到其中

    如何创建文件并使用内存流写入文件 我需要使用内存流来防止其他线程尝试访问该文件 我试图保存到文件的数据是 html 如何才能做到这一点 假设您的意思是如何将文件的内容复制到内存流 如果您使用的是框架4 var memoryStream ne
  • 在 TPL Dataflow 中,是否可以在创建块之后但使用之前更改 DataflowBlockOptions?

    有效果吗 我想推迟设置 ExecutionDataflowBlockOptions SingleProducerConstrained 属性 直到我准备好将网络链接在一起 因为 我想将创建块及其语义与将网络及其语义链接在一起分开 但据我所知
  • 进入嵌入式[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 c11 标准和 clang 来使用 strcpy_s

    我正在运行 OS X Sierra 并尝试编译一个使用的 c 程序strcpy s 但是我安装的 clang 编译器使用的是 c99 标准 但是据我读到的 https embeddedgurus com barr code 2017 08
  • 如何有效地测试action是否用属性(AuthorizeAttribute)修饰?

    我正在使用 MVC 并且有一种情况OnActionExecuting 我需要确定即将执行的Action方法是否用属性修饰 AuthorizeAttribute尤其 我不是问授权是否成功 失败 而是问该方法是否需要授权 对于非 MVC 人员
  • 使用 R.Net 版本 1.5.5 创建 REngine 实例

    我正在尝试创建一个 Hello World 示例R Language using R Net版本1 5 5 从 NuGet 加载 不幸的是 我见过的在线示例都不起作用 这就是我所做的 已安装Microsoft R Open 3 2 4 增强
  • 在“delete this;”语句期间发生了什么?

    请考虑以下代码 class foo public foo foo void done delete this private int x 以下两个选项中发生了什么 并且有效吗 选项1 void main foo a new foo a gt
  • 调用 Console.ReadLine() 的方法的 C# 单元测试

    我想为名为的类的成员函数创建一个单元测试ScoreBoard它存储了一场比赛中排名前五的球员 问题是我为 SignInScoreBoard 正在呼叫Console ReadLine 这样用户就可以输入他们的名字 public void Si
  • 如何检查我的程序是否有数据通过管道传输到其中

    我正在编写一个应该通过标准输入读取输入的程序 所以我有以下结构 FILE fp stdin 但是 如果用户没有将任何内容通过管道传输到程序中 这就会挂起 我如何检查用户是否确实将数据通过管道传输到我的程序中 例如 gunzip c file
  • 检查字符串中是否存在所有字符值

    我目前正在做这项任务 但我被困住了 目标是读取文件并查找文件中的字符串中是否存在这些字符值 我必须将文件中的字符串与作为参数放入的另一个字符串进行比较 但是 只要每个字符值位于文件中的字符串中 那么它就 匹配 示例 输入和输出 a out
  • ASP Net Core 属性路由和双正斜杠

    正如所指出的here https stackoverflow com a 20524044 3129340 URL 中包含双斜杠是有效的 我有一个使用属性路由的 ASP Net Core 项目 一个名为GroupController用于处理
  • 更改为通用接口对性能的影响

    我使用 Visual Studio 使用 C NET 开发应用程序 ReSharper 在我的方法原型中经常建议我用更通用的类型替换输入参数的类型 例如 如果我仅在方法主体中使用带有 foreach 的列表 则使用 List 和 IEnum
  • ld: 无法对非 PE 输出文件执行 PE 操作错误

    我是操作系统编程的新手 我正在读一本书 其中给出了一个简单的内核示例 如下所示 main char video memory 0xb8000 video memory X 为了编译这个名为 kernel c 的文件 我在 Windows 7
  • 在 Windows 上构建 MLT 框架时出错

    我一直在遵循官方提供的构建指南here http www mltframework org bin view MLT WindowsBuild 我需要 MLT 来创建视频播放器 并且我选择仅安装前 4 个库 如指南中所述 FFmpeg SD
  • 使用智能指针在大型对象集合中创建多个索引

    我正在为一个大型对象集合创建多个索引 即使用不同的键 对象可以改变 集合可以缩小和增长 到目前为止我的想法 保留某种指向对象的指针的多个集合 使用set代替map以获得更好的封装 使用 unordered set 可以很好地扩展大型数据集
  • 我的 C 程序无法运行,并显示“无法执行二进制文件:Exec 格式错误”

    我刚刚从 C 开始 我试图编译下面的代码并执行它 但出现错误 也在运行sizeBS 或数据堆栈中没有显示任何内容 include
  • 编写一个转储屏幕像素的 RDP 客户端

    我想在中实现 RDP 客户端C 它能够获取屏幕所有像素的颜色值并将它们转储到文件中 我知道这在概念上与 RDP 的工作方式不同 但我的应用程序需要它 我正在尝试利用freerdp https github com FreeRDP FreeR
  • 删除指针后将其设为 NULL 是一个好习惯吗?

    我首先要说的是 使用智能指针 您将永远不必担心这个问题 下面的代码有什么问题 Foo p new Foo use p delete p p NULL 这是由答案和评论 https stackoverflow com questions 19

随机推荐

  • 使用Hypothesis生成测试数据

    Hypothesis是Python的一个高级测试库 它允许编写测试用例时参数化 然后生成使测试失败的简单易懂的测试数据 可以用更少的工作在代码中发现更多的bug 安装 pip install hypothesis 如何设计测试数据 通过介绍
  • MATLAB绘图/数据的可视化

    MATLAB绘图 数据的可视化 二维绘图 科研绘图模板 利用MATLAB直接对Excel数据绘图 三维绘图 MATLAB数据可视化是极重要的功能 文章介绍了MATLAB绘图与数据可视化的相关方法 阅读本文读者可以快速掌握MATLAB绘图技巧
  • 【Unity 3D】学习笔记(三)

    基本操作演练 下载 Fantasy Skybox FREE 构建自己的游戏场景 天空是任何游戏离不开的设定 而且要按季节与时间变化 是表示时间的重要工具 天空盒是一种材料 我们可以通过六面体构建一个天空盒 首先点击Asset上下文菜单 gt
  • shineblink APDS-9960传感器感应手势

    APDS 9960感应手势 一 本例程实现功能 二 传感器应用限制说明 三 接线图 五 完整代码 六 代码运行结果 一 本例程实现功能 通过APDS 9960传感器模块感应在传感器表面正上方的 上 下 左 右 手势动作 二 传感器应用限制说
  • 学习笔记(01):java美妆商城项目

    立即学习 https edu csdn net course play 23989 290220 utm source blogtoedu 第一节笔记 1 前端 jsp css javascript jQuery js框架 bootstra
  • SpringBoot+MyBatisPlus+thymeleaf增删改查

    SpringBoot MyBatisPlus thymeleaf增删改查 文章目录 SpringBoot MyBatisPlus thymeleaf增删改查 前言 作者简介 在校学生一枚 Java领域新星创作者 Java正在学习中 期待和大
  • 【Python习题集6】类与对象

    类与对象 一 实验内容 二 实验总结 一 实验内容 1 设计一个Circle类来表示圆 这个类包含圆的半径以及求面积和周长的函数 在使用这个类创建半径为1 10的圆 并计算出相应的面积和周长 半径为1的圆 面积 3 14 周长 6 28 半
  • SSH、shell、Xshell 、bash、Git、Git bash 、Git shell区别与联系

    SSH是安全外壳协议 为 Secure Shell 的缩写 SSH 为建立在应用层和传输层基础上的安全协议 专为远程登录会话和其他网络服务提供安全性的协议 利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题 SSH工具 有一个软件叫
  • vscode 函数没有引入提示_VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法)...

    在使用VSCODE进行C语言程序设计时 如果用到了头文件声明函数 c文件定义函数 在编译时尽管已经引用了相应的头文件 VSCODE文本编辑器也没有报错 但仍然无法编译 错误提示如下 d ComputerHomework 2019 winte
  • Java导入导出json

    1 导入依赖
  • 模式识别与操作符在CEP中的应用

    模式识别与操作符在CEP中的应用 随着大数据技术的快速发展 复杂事件处理 Complex Event Processing CEP 成为了处理实时流数据的重要工具 CEP通过对实时数据流进行高级模式识别和复杂操作符的运算 可以从海量数据中提
  • 微信小程序基础面试题【29道】

    这里写目录标题 1 请谈谈wxml与标准的html的异同 2 请谈谈WXSS和CSS的异同 3 请谈谈微信小程序主要目录和文件的作用 4 请谈谈小程序的双向绑定和vue的异同 5 简单描述下微信小程序的相关文件类型 6 微信小程序有哪些传值
  • 大数据毕设选题 - 疫情数据分析可视化系统(python flask 爬虫)

    文章目录 0 前言 1 课题背景 2 实现效果 2 1 整体界面展示 2 2 31省病例柱形图 2 3 全国现有确诊人数趋势 2 4 中国累计确诊时间线 2 5 中国疫情情况饼状图 2 6 高风险树状图 3 相关理论及技术 3 1爬虫 3
  • <VTK(0)> VTK8.2+VS2019环境配置

    VTK8 2 VS2019编译 最近用到VTK库 打算重新编译 发现能找到的资源中VTK库的编译比较详细 但是VS的环境配置比较乱 这里简述VTK的源码编译并提供VS环境配置的保姆教学 准备工作 1 安装VS2019 自查 Visual S
  • 阿里P7大牛整理!腾讯、阿里Android高级面试真题汇总,经典好文

    开头 相信大多数互联网的从业者都有着这样一个梦想 进大厂 获得丰厚的薪酬 和更优秀的人一起共事 在技术上获得更快的成长 然而部分人其实一直都陷入了 穷忙 的困局 觉得自己每天白天黑夜都在工作 高强度输出 但是却并没有获得机会的眷顾 久而久之
  • 生成随机颜色和随机数的生成

    1 随机颜色生成 方法1 var color parseInt Math random 0XFFFFFF toString 16 方法2 var color rgba parseInt Math random 256 parseInt Ma
  • [ZZ]【电子电路】上下拉电阻总结

    上下拉电阻总结 SkySeraph整理 2009 6 上拉电阻 1 当TTL电路驱动COMS电路时 如果TTL电路输出的高电平低于COMS电路的最低高电平 一般为3 5V 这时就需要在TTL的输出端接上拉电阻 以提高输出高电平的值 TTL
  • 基于yolov5交通标志识别(毕业设计)

    1 数据集 TT100K数据集 是由清华与腾讯的联合实验室整理并公布的 提供的10万张图像包含了30000个交通标志 图像来源于由6个像素很高的广角单反相机在中国的多个城市拍摄的腾讯街景全景图 拍摄地点的光照条件 天气条件有所不同 原始的街
  • 浅谈 forEach()

    用于遍历数组 无返回值 let arr 1 2 3 4 arr forEach function item index array array index item 2 console log arr 2 4 6 8 可以看到 forEac
  • 【C++入门】深拷贝和浅拷贝详解

    1 深拷贝和浅拷贝 1 当我们对复杂类型 结构体或者类 的对象进行初始化时 如果将同类型的对象A赋值给同类型的对象B 此时就涉及深拷贝和浅拷贝的问题 2 如何定义拷贝的深和浅 浅拷贝就是把类 结构体的变量原封不动的赋值 不考虑指针变量 深拷