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

c++深拷贝、浅拷贝

在 C++ 中,深拷贝和浅拷贝是两个重要的概念,尤其在涉及动态内存分配和指针成员时。这两个概念描述了对象复制时的行为。

浅拷贝

浅拷贝是指复制对象时,仅复制对象的基本数据成员,对于指针成员,只复制指针地址,即两个对象的指针成员指向同一块内存。浅拷贝的默认实现是通过编译器生成的拷贝构造函数和赋值运算符实现的。

示例代码
#include <iostream>class ShallowCopy {
public:int* data;// 构造函数ShallowCopy(int value) {data = new int(value);}// 拷贝构造函数(浅拷贝)ShallowCopy(const ShallowCopy& other) {data = other.data; // 仅复制指针}// 打印数据void print() const {std::cout << "Data: " << *data << std::endl;}// 析构函数~ShallowCopy() {delete data;}
};int main() {ShallowCopy obj1(10);ShallowCopy obj2 = obj1; // 浅拷贝obj1.print();obj2.print();return 0;
}

在这个例子中,obj1obj2data 指针指向同一块内存。这可能会导致在一个对象析构时,释放了另一个对象仍在使用的内存,从而引发未定义行为。

深拷贝

深拷贝是指复制对象时,不仅复制对象的基本数据成员,对于指针成员,分配新的内存并复制指针所指向的实际数据。深拷贝通常需要自定义拷贝构造函数和赋值运算符。

示例代码
#include <iostream>class DeepCopy {
public:int* data;// 构造函数DeepCopy(int value) {data = new int(value);}// 拷贝构造函数(深拷贝)DeepCopy(const DeepCopy& other) {data = new int(*other.data); // 分配新内存并复制数据}// 赋值运算符(深拷贝)DeepCopy& operator=(const DeepCopy& other) {if (this == &other) {return *this; // 防止自我赋值}delete data; // 释放旧内存data = new int(*other.data); // 分配新内存并复制数据return *this;}// 打印数据void print() const {std::cout << "Data: " << *data << std::endl;}// 析构函数~DeepCopy() {delete data;}
};int main() {DeepCopy obj1(10);DeepCopy obj2 = obj1; // 深拷贝obj1.print();obj2.print();*obj1.data = 20; // 修改 obj1 的数据obj1.print();obj2.print(); // obj2 的数据不受影响return 0;
}

在这个例子中,obj1obj2data 指针指向不同的内存块,因此修改 obj1 的数据不会影响 obj2

总结

  • 浅拷贝:仅复制指针地址,多个对象共享同一块内存,可能会导致资源管理问题。
  • 深拷贝:分配新的内存并复制数据,每个对象都有自己的独立内存,避免了资源管理问题。

在实际开发中,选择使用深拷贝还是浅拷贝,取决于具体的需求和对象的生命周期管理。对于需要独立管理资源的情况,深拷贝通常是更安全的选择。

相关文章:

c++深拷贝、浅拷贝

在 C 中&#xff0c;深拷贝和浅拷贝是两个重要的概念&#xff0c;尤其在涉及动态内存分配和指针成员时。这两个概念描述了对象复制时的行为。 浅拷贝 浅拷贝是指复制对象时&#xff0c;仅复制对象的基本数据成员&#xff0c;对于指针成员&#xff0c;只复制指针地址&#xff…...

k8s核心组件

Master组件&#xff1a; kube-apiserver&#xff1a;用于暴露Kubernetes API&#xff0c;任何资源请求或调用操作都是通过kube-apiserver提供的接口进行。它是Kubernetes集群架构的大脑&#xff0c;负责接收所有请求&#xff0c;并根据用户的具体请求通知其他组件工作。etcd&am…...

反编译腾讯vmp

反编译腾讯vmp 继续学习的过程 多翻译几个vmp 学习 看看他们的是怎么编译的 写一个自己的vmp function __TENCENT_CHAOS_VM(U, T, g, D, j, E, K, w) {// U指令起点// T是指令list// g是函数this 或window对象// D是内部变量和栈}for (0; ;)try {for (var B !1; !B;) {let no…...

Ollama:本地部署大模型 + LobeChat:聊天界面 = 自己的ChatGPT

本地部署大模型 在本地部署大模型有多种方式&#xff0c;其中Ollama方式是最简单的&#xff0c;但是其也有一定的局限性&#xff0c;比如大模型没有其支持的GGUF二进制格式&#xff0c;就无法使用Ollama方式部署。 GGUF旨在实现快速加载和保存大语言模型&#xff0c;并易于阅读…...

JS中splice怎么使用

在JavaScript中&#xff0c;splice() 是一个数组方法&#xff0c;用于添加/删除项目&#xff0c;并返回被删除的项目。这个方法会改变原始数组。 splice() 方法的基本语法如下&#xff1a; array.splice(start[, deleteCount[, item1[, item2[, ...]]]]) start&#xff08;必…...

Flutter项目,Xcode15, 编译正常,但archive报错

错误提示 PhaseScriptExecution [CP]\ Embed\ Pods\ Frameworks /Users/目录/Developer/Xcode/DerivedData/Runner-brgnkruocugbipaswyuwsjsnqkzm/Build/Intermediates.noindex/ArchiveIntermediates/Runner/IntermediateBuildFilesPath/Runner.build/Release-iphoneos/Runner…...

云动态摘要 2024-06-17

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [低至1折]腾讯混元大模型产品特惠 腾讯云 2024-06-06 腾讯混元大模型产品特惠&#xff0c;新用户1折起&#xff01; 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器ECS试用产品续用…...

【JavaScript脚本宇宙】图像处理新纪元:探索六大JavaScript图像处理库

揭开图像处理的奥秘&#xff1a;六款顶级JavaScript库详解 前言 在现代Web开发中&#xff0c;图像处理变得越来越重要。从图像比较到图像编辑&#xff0c;每个步骤都需要高效、强大的工具来完成。JavaScript生态系统为开发者提供了丰富的图像处理库&#xff0c;这些库不仅功能…...

使用python调ffmpeg命令将wav文件转为320kbps的mp3

320kbps竟然是mp3的最高采样率&#xff0c;有点低了吧。 import os import subprocessif __name__ __main__:work_dir "D:\\BaiduNetdiskDownload\\周杰伦黑胶\\魔杰座" fileNames os.listdir(work_dir)for filename in fileNames:pure_name, _ os.path.spli…...

程序启动 报错 no main manifest attribute

1、报错问题 未找到启动类 2、可能的原因 启动没加注解maven打包插件没有设置...

java-内部类 2

### 8. 内部类的访问规则和限制 #### 8.1 访问外部类的成员 内部类可以直接访问外部类的成员变量和方法&#xff0c;包括私有成员。例如&#xff1a; java class OuterClass { private String outerField "Outer field"; class InnerClass { void di…...

【小技巧】pycharm中自动换行的实现

pycharm如何自动换行 pycharm在setting里面设置自动化换行 具体步骤如下&#xff1a; &#xff08;我这边用的版本为PyCharm 2023.3版本&#xff09; 1、打开pycharm&#xff0c;选择“file”&#xff08;文件&#xff09; 2、选择“Setting“&#xff08;设置&#xff09;…...

如何修改倍福CX7000PLC IP地址

我们可以通过登录网页修改PLC的IP地址,这个需要我们知道PLC的初始IP地址 1、浏览器直接输入PLC 的IP地址 2、点击修改按钮(就是那个旋转) 修改IP地址前DHCP要先disable关闭 。 3、DHCP关闭 4、点击保存 5、在CAT3里搜索 在SYSTEM双击,之后点击搜索,具体过程可以参考下…...

python安装flask,flask框架,使用静态文件、模板、get和post请求

flask框架安装 pip install flask1.创建app.py文件 启动运行 # 导入Flask类 from flask import Flask#Flask类接收一个参数__name__ app Flask(__name__)# 装饰器的作用是将路由映射到视图函数index app.route(/) def index():return Hello World# Flask应用程序实例的run方…...

Docker:Harbor

目录 一、Harbor介绍 二、安装 Harbor 2.1 环境准备 2.2下载 Harbor 3.3 修改配置&#xff08;可选&#xff09; 3.4 启动 Harbor 3.5访问 Harbor 三、使用 Harbor 3.1 管理Harbor 一、Harbor介绍 Docker Harbor 是由 VMware 公司开源的一款企业级的 Docker Registry …...

2024 6.10~6.16 周报

一、上周工作 完成毕设 二、本周计划 吴恩达的机器学习、实验-回顾之前密集连接部分&#xff0c;调整损失函数 三、完成情况 3.1 机器学习的两种主要类型&#xff1a; 监督学习&#xff08;supervised learning&#xff09;&#xff08;实际中使用最多的&#xff09;&…...

clickhouse学习笔记(四)库、表、分区相关DDL操作

目录 一、数据库操作 1、创建数据库 2、查询及选择数据库 3、删除数据库 二、数据表操作 1、创建表 2、删除表 3、基本操作 ①追加新字段 ②修改字段类型或默认值 ③修改字段注释 ④删除已有字段 ⑤移动数据表&#xff08;重命名&#xff09; ⑥清空表 三、默认值…...

聚焦现代商贸物流愿景 构筑供应链金融服务体系|第二届京津冀现代商贸物流金融创新发展百人大会成功举办

6月16日&#xff0c;以“链产业筑高地赢未来——聚焦现代商贸物流愿景、构筑供应链金融服务体系”为主题的第二届京津冀现代商贸物流金融创新发展百人大会(以下简称“百人大会”)&#xff0c;在2024中国廊坊国际经济贸易洽谈会&#xff08;以下简称“廊坊经洽会”&#xff09;开…...

解锁数据潜力:数据提取与治理的终极指南

解锁数据潜力&#xff1a;数据提取与治理的终极指南 在当今信息爆炸的时代&#xff0c;数据已成为企业决策的核心驱动力。然而&#xff0c;仅仅拥有海量数据并不足以确保竞争优势&#xff0c;关键在于如何有效地提取、治理和利用这些数据。本文将为您揭示数据提取技术的奥秘&a…...

行列视(RCV)报表中的时间是如何处理的?

答&#xff1a;行列视&#xff08;RCV&#xff09;作为一套独立、且用于数据加工、处理和展示的系统&#xff0c;具有一套独立的时间处理机制。报表中的指标除了数据值外&#xff0c;最重要的属性就是时间。主要规则介绍如下&#xff1a; 实时数据&#xff0c;时间是指当前时间…...

成员变量和for循环里面的变量不冲突原因

今天写项目&#xff0c;发现一个类中有一个成员变量与for循环块中的局部变量重名了&#xff0c;但是也没有报错&#xff0c;功能也是正常的&#xff0c;然后了解了一下原因&#xff1a; 成员变量和 for 循环块中的变量不冲突的原因在于它们的作用域&#xff08;Scope&#xff…...

如何使用任意浏览器远程访问本地搭建的Jellyfin影音平台

文章目录 前言1. Jellyfin服务网站搭建1.1 Jellyfin下载和安装1.2 Jellyfin网页测试 2.本地网页发布2.1 cpolar的安装和注册2.2 Cpolar云端设置2.3 Cpolar本地设置 3.公网访问测试4. 结语 前言 本文主要分享如何使用Windows电脑本地部署Jellyfin影音服务并结合cpolar内网穿透工…...

CEM美国培安消解罐内管 CEM40位 55ML 微波消解罐

内罐采用高纯实验级进口增强改性处理TFM材料或PFA材料&#xff0c;我厂加工的微波罐能与原厂仪器匹配&#xff0c;而且是盖、体通配&#xff0c;无尺寸误差。精选材质&#xff0c;未添加回料&#xff0c;洁净的加工环境&#xff0c;优化了加工工艺&#xff0c;确保低本底&#…...

使用 Selenium 保持登录会话信息

使用 Selenium 保持登录会话信息 在进行 Web 自动化测试时,保持登录会话信息是一个常见的需求。这不仅能节省每次测试时重复登录的时间,还能模拟实际用户行为,使测试更加真实可靠。在这篇博客中,我们将深入探讨如何使用 Selenium 在每次启动时保持原有的登录会话信息。 什…...

程序员画图工具?那必然是你了!!【送源码】

作为一个程序员&#xff0c;画图是必不可少的技巧。当然此画图不是搞艺术&#xff0c;而是画各种架构图、流程图、泳道图以及各种示意图。 平时我不论是记笔记、写技术文章&#xff0c;还是工作中写文档&#xff0c;都需要配上各种各样的示意图。不管是帮助自己更好的掌握知识…...

k8s nginx.conf配置文件配置

无状态nginx配置nginx.conf覆盖容器配置nginx.conf 代码&#xff1a;events {worker_connections 1024; }http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] "$request&q…...

XSKY 在金融行业:新一代分布式核心信创存储解决方案

近日&#xff0c;国家金融监督管理总局印发了《关于银行业保险业做好金融“五篇大文章”的指导意见》&#xff0c;在数字金融领域提出明确目标&#xff0c;要求银行业保险业数字化转型成效明显&#xff0c;数字化经营管理体系基本建成&#xff0c;数字化服务广泛普及&#xff0…...

第9章 类

第9章 类 9.1 创建和使用类9.1.1 创建 Dog 类9.1.2 根据类创建实例 9.2 使用类和实例9.2.1 Car 类9.2.2 给属性指定默认值9.2.3 修改属性的值 9.3 继承9.3.1 子类的方法__init__()9.3.2 给子类定义属性和方法9.3.3 重写父类的方法9.3.4 将实例用作属性9.3.5 模拟实物 9.4 导入类…...

Elasticsearch 第二期:倒排索引,分析,映射

前言 正像前面所说&#xff0c;ES真正强大之处在于可以从无规律的数据中找出有意义的信息——从“大数据”到“大信息”。这也是Elasticsearch一开始就将自己定位为搜索引擎&#xff0c;而不是数据存储的一个原因。因此用这一篇文字记录ES搜索的过程。 关于ES搜索计划分两篇或…...

函数的一点点习题

1、利用递归计算0-n的和 #include <stdio.h> #include <string.h> #include <stdlib.h> int rec(int n) {if(n0)return 0;elsereturn nrec(n-1); } int main(int argc, const char *argv[]) {int n0;printf("please enter n:");scanf("%d&quo…...

网站及数据库怎么做后门/国外网站推广平台有哪些

【链接】http://acm.hdu.edu.cn/showproblem.php?pid6109 【题意】 在这里写题意【题解】 要处理的关系越多,肯定就越容易错.->单调性.根据这个二分出每组数据的最后一个是什么就好.二分判断这样:先处理出哪些数据是一样的,并在一起;并查集然后再处理不一样的,看看不一样的…...

安庆商务网站建设/百度推广服务费一年多少钱

我在编写客户端 - 服务器应用程序。我有C和Klient中简单内存游戏的游戏服务器。我正在Eclipse中进行开发(一个用于Eclipse的C&#xff0c;一个用于Eclipse的Eclipse)。我使用tpc套接字解决客户端和服务器之间的通信。让我们在服务器上进行基本的操作连接 - 在一种情况下&#x…...

app定制开发的公司/安卓优化大师手机版

JavaWeb 应用设计及实战 目录 上一章 下一章 上一个任务/上一节 下一个任务/下一节 目录 任务3&#xff1a;使用原生 JSON 格式构建响应数据 6.3.1 认识 JSON 1.定义 JSON 对象 2. 定义 JSON 数组 6.3.2 定义使用 JSON 格式的数据 示例4 HTML 关键代码&#xff…...

织梦调用网站备案号/明星百度指数在线查询

1.常用且容易忘记的快捷键 iter 生成增强forxun 1.1.循环相关的快捷键 itar 生成array for代码块 itco 生成Collection迭代 iten 生成enumeration遍历 iter 生成增强forxun itit 生成iterator 迭代 itli 生成List的遍历 ittok 生成String token遍历 itve 生成Vector数组迭代 …...

风铃网站具体是做那方面的/百度信息流账户搭建

Linux Kernel listxattr本地拒绝服务漏洞2007-02-01eNet&Ciweek受影响系统&#xff1a;Linux kernel < 2.6.19.2RedHat Enterprise Linux WS 4RedHat Enterprise Linux ES 4RedHat Enterprise Linux AS 4描述&#xff1a;Linux Kernel是开放源码操作系统Linux所使用的内…...

不用vip的免费追剧软件/防城港网站seo

每次使用etcdctl&#xff0c;都要长长的一大串&#xff0c;太麻烦了&#xff0c;直接把变量写入文件中&#xff0c;就方便很多了 vi ~/.bashrc 行尾添加 export ETCDCTL_ENDPOINTShttps://127.0.0.1:2379export ETCDCTL_CACERT/etc/kubernetes/pki/etcd/ca.crtexport ETCDCTL_C…...