首页 > 其他分享 >深拷贝和浅拷贝

深拷贝和浅拷贝

时间:2023-12-04 13:34:17浏览次数:29  
标签:变量 对象 复制 内存 动态内存 拷贝

在 C++ 中,深拷贝和浅拷贝是两种不同的对象复制方式:

  • 浅拷贝:当我们创建一个对象的副本时,如果仅仅复制所有成员变量的数据,那么这就是浅拷贝。这在所有的变量都在栈内存中分配时工作得很好1。但是,如果有些变量是在堆内存中动态分配的,那么复制的对象变量也会引用同一块内存位置1。这将导致二义性和运行时错误,如悬挂指针1。因为两个对象都引用同一块内存位置,所以一个对象中的更改也会反映在另一个对象中1。由于我们希望创建对象的副本,因此浅拷贝不能满足这个目的1

  • 深拷贝:在深拷贝中,通过复制所有变量的数据,并为对象分配相同的内存资源并赋予相同的值,从而创建一个对象。为了执行深拷贝,我们需要显式地定义拷贝构造函数,并根据需要分配动态内存1。此外,还需要在其他构造函数中为变量动态分配内存1

总的来说,深拷贝和浅拷贝的主要区别在于它们如何处理对象的动态内存。浅拷贝只复制指向动态内存的指针,而不复制动态内存本身。深拷贝不仅复制指向动态内存的指针,还复制动态内存本身。

 

标签:变量,对象,复制,内存,动态内存,拷贝
From: https://www.cnblogs.com/whcjob/p/17874712.html

相关文章

  • JS赋值、浅拷贝、深拷贝的区别
    在说明它们的区别之前,首先需要了解JS的数据类型和它们的存放位置。  数据类型基本数据类型:String、Number、Boolean、Undefined、Null、Symbol(es6)、BigInt(es6)引用数据类型:Object  存放位置基本数据类型是存放在栈中的数据段,直接存储的就是值本体。引用数据类型是存......
  • docker 拷贝docker中文件,并获取最新
    1、2、#!/bin/bashdate_str=$(date+_%Y_%m_%d_%H_%M_%S.sql.gz)echo'开始备份数据'$date_str#获取容器idmysqlid=`dockerps-aqf"name=mysql57"`#进入mysql容器dockerexec-i${mysqlid}/bin/bash<<'EOF'mysqldump-hlocalhost-uroot......
  • Python之深浅拷贝
    浅copy:   1.是把列表本身独立,里面的元素是被两个列表共享的   2.当其中一个列表中的元素被改变时,另一个列表中的元素不会随之变化。   3.当列表里面还有列表时,修改内部列表的内容时,另一个列表中的内部列表也会随之变化a1=["a","b","c","aa"]b1=a1a1[0]="1"prin......
  • 自定义拷贝程序
    【一】需求介绍制作一个简易的文件拷贝程序【二】功能分析拷贝程序输入原始文件路径输入目标文件路径【三】代码实现#1.获取想要拷贝的文件路径source_file_path=input('请输入想要拷贝的文件路径>>>:').strip()#2.获取目标路径(到底拷贝到哪里)target_file_pat......
  • 深度拷贝
    1、java后台BeanUtils.copyProperties不是深拷贝要实现高性能且安全的深度克隆方法还是实现Serializable接口,多层克隆时,引用类型均要实现Serializable接口。例如:publicclassBaseEntityextendsBaseCreatedUpdatedDeletedEntityimplementsSerializable 参考文献:https:/......
  • Linux服务器远程文件拷贝两种方法介绍
    假设有两台linux服务器,如何将111.22.3.64上的/usr/local/example-server目录下的所有文件和目录拷贝到55.166.77.246的/usr/local/example-server目录下?  Linux服务器远程文件拷贝两种方法介绍要从一个Linux服务器拷贝文件到另一个Linux服务器,可以使用scp命令或rsync命令。以下是......
  • linux 拷贝命令
    基本操作最简单的把文件a复制到文件夹file_a中,使用:cpafile_a,即可。复制多个文件想把多个文件如a,b,c复制到文件夹file_a中,使用:cpabcfile_a,即可。复制一个文件夹下的多个文件如果我们想把文件夹file_a中的多个文件,如a,b,c复制到文件夹file_b中,该怎么办呢?用最土的方法,cpfile......
  • 深拷贝与浅拷贝
    浅拷贝与深拷贝 深拷贝基本数据类型都是深拷贝a=b改变a的值b不会改变浅拷贝引用数据类型都是浅拷贝a=b改变a的值b也会改变想把浅拷贝改为深拷贝用for或者...拓展运算符 注意此方法只能是数组中是基本数据类型  要想把数组中引用数据类......
  • 痞子衡嵌入式:在IAR开发环境下手动拷贝自定义程序段到RAM中执行的方法
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是IAR下手动拷贝自定义程序段到RAM中执行的方法。在痞子衡旧文《IAR下RT-Thread工程自定义函数段重定向失效分析》里,我们知道IAR链接器处理自定义程序段重定向是有一些限制的,只要用户重写了底层__low_l......
  • js深拷贝function
    js拷贝函数怎么操作使用bind()方法JavaScript的函数提供了bind()方法,可以用来创建一个新函数,该函数与原函数具有相同的代码,但其上下文和部分参数可以绑定。通过使用空的上下文和参数,可以实现函数的拷贝。functionoriginalFunction(){console.log("Originalfunction")......