深拷贝||浅拷贝

Matlab之fdesign的应用说明 fdesign 是 MATLAB 中用于数字滤波器设计的工具(属于),它提供了一种系统化的方式来定义滤波器参数并生成相应的滤波器。指定滤波器的频率、幅度等参数。例如,设计一个低通滤波器:Fs = 1000;% 采样率 (Hz)% 通带截止频率% 阻带截止频率Apass = 1;% 通带衰减 (dB)Astop = 60;% 阻带衰减 (dB) 阅读详情

一、 拷贝构造函数与构造函数的区别:

      拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)--参考分析1。

    拷贝构造函数与构造函数的区别:

  class 类名

  {

  public:

  类名(形参参数)//构造函数

  类名(类名&对象名)//拷贝构造函数

  ,,,,,,,,,,,,,,,,,,,,,

  };

  拷贝构造函数的实现:

  类名::类名(类名&对象名)//拷贝构造函数的实现

  {函数体}

  拷贝构造函数:

  Class Point

  {

  Public:

  Point(int xx=0,int yy=m)(X=xx;Y=yy;)

  Point(Point& p);

  Int getX() {return X;}

  Int getY(){ return Y;}

  Private :

  Int X,Y;

  }

  Point::Point(Point& p)

  {

  X=p.X;

  Y=p.Y;

  Cout<<"拷贝构造函数调用"<<endl;

  }

二、拷贝构造函数介绍:

     在C++中,下面三种对象需要调用拷贝构造函数:

  1) 对象以值传递的方式传入函数体;

  2) 对象以值传递的方式从函数返回;

  3) 对象需要通过另外一个对象进行初始化;

      当使用已初始化对象去初始化另一个新对象的时候,拷贝构造函数就会被自动调用,如果没有自定义拷贝构造函数的时候系统将会提供默认的拷贝构造函数来完成这个过程;

      如果类体内的成员是需要开辟动态开辟堆内存的, 而不自定义深拷贝 构造函数,就会导致堆内存的所属权产生混乱,两个对象的指针指向同一个堆地址,一旦程序产生析构,释放堆的时候,计算机是不可能清楚这段地址是真正属于谁的,当连续发生两次析构的时候就出现了运行错误。

 

上面代码就演示了深拷贝的问题 ,对对象b的cname属性采取了新开辟内存的方式避免了内存归属不清所导致析构释放空间时候的错误,最后我必须提一下,对于上面的程序我的解释并不多,就是希望读者本身运行程序观察变化,进而深刻理解。

深拷贝和浅拷贝的定义 可以简单理解成:

如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程(新开辟内存的方式 )的时候,这个过程就可以叫做深拷贝;

反之对象存在资源但复制过程并未复制资源(仅仅复制对象成员的指针,未新开辟内存 )的情况视为浅拷贝。

 

三、拷贝构造函数与赋值运算符:

事实上,拷贝构造函数是由普通构造函数和赋值操作符共同实现的。

赋值符的重载 :

下面的代码与上例相似

  int main(int argc, char* argv[])

  {

  CExample theObjone;

  theObjone.Init(40);

  CExample theObjthree;

  theObjthree.Init(60);

  //现在需要一个对象赋值操作,被赋值对象的原内容被清除,并用右边对象的内容填充。

  theObjthree=theObjone;

  return 0;

  }

  也用到了"="号,但与"一、"中的例子并不同,"一、"的例子中,"="在对象声明语句中,表示初始化。更多时候,这种初始化也可用括号表示。

  例如 CExample theObjone(theObjtwo);

  而本例子中,"="表示赋值操作。将对象theObjone的内容复制到对象theObjthree;,这其中涉及到对象theObjthree原有内容的丢弃,新内容的复制。

  但"="的缺省操作只是将成员变量的值相应复制。旧的值被自然丢弃。

  由于对象内包含指针,将造成不良后果:指针的值被丢弃了,但指针指向的内容并未释放。指针的值被复制了,但指针所指内容并未复制。

  因此,包含动态分配成员的类除提供拷贝构造函数外,还应该考虑重载"="赋值操作符号。

  类定义变为:

  class CExample

  {

  ...

  CExample(const CExample&); //拷贝构造函数

  CExample& operator = (const CExample&); //赋值符重载

  ...

  };

  //赋值操作符重载

  CExample & CExample::operator = (const CExample& RightSides)

  {

  nSize=RightSides.nSize; //复制常规成员

  char *temp=new char[nSize]; //复制指针指向的内容

  memcpy(temp,RightSides.pBuffer,nSize*sizeof(char));

  delete []pBuffer; //删除原指针指向内容 (将删除操作放在后面,避免X=X特殊情况下,内容的丢失)

  pBuffer=NULL;

  pBuffer=temp; //建立新指向

  return *this

  }

 

  四、注意事项

  常见错误:

  拷贝构造函数使用赋值运算符重载的代码。

  CExample::CExample(const CExample& RightSides)

  {

  *this=RightSides //调用重载后的"="

  }

  而这样会造成循环调用重载后的"="和拷贝构造函数(因为对象以值传递的方式传入函数体会调用拷贝构造函数 ),最后造成栈溢出(Stack Overflow)。 

 

 ****分析 : *********************************************

   1、 拷贝构造函数不可以改变它所引用的对象,其原因如下 :当一个对象以传递值的方式传入函数的时候,拷贝构造函数自动的被调用来生成函数中的对象(如果拷贝函数可以改变并且改变了引用对象,则创建的新对象与引用对象不一致,未能达到拷贝目的 )。

   2、如果一个对象是被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象这样复制才可以传入它自己的拷贝构造函数,这会导致无限循环直至栈溢出(Stack Overflow) 。除了当对象传入函数的时候被隐式调用以外,拷贝构造函数在对象被函数返回的时候也同样的被调用。

 **************************************************

STM32入门教程:人脸识别 STM32CubeMX配置 打开STM32CubeMX,创建一个新的工程,并选择你使用的STM32系列和具体型号。根据摄像头模块的规格,将摄像头的输出引脚连接到相应的STM32引脚上。人脸识别是一种非常常见的人工智能应用,它可以通过摄像头捕捉到的图像,识别出图像中的人脸并进行相关的分析和处理。在本教程中,我们将使用STM32开发板和相关传感器,通过指导你搭建一个基于STM32的简单人脸识别系统,并编写相应的代码来实现该功能。另外,为了达到更好的人脸识别效果,可能需要使用更高性能的处理器和更复杂的算法。 阅读详情

相关推荐

简单易懂的AXI_Lite 总线详解

简单易懂的AXI_Lite 总线详解 1、前言 AXI_LITE协议主要应用于Xilinx的ZYNQ芯片构架下的ARM和FPGA之间的数据读写,更偏向于单个寄存器的读写。 2、AXI总线与ZYNQ的关系 AXI(Advanced eXtensible Interface)本是由ARM公司提出的一种总线协议,Xilinx从6系列的FPGA开始对AXI总线提供支持,此时AXI已经发展到了AXI4这个版本,所以当你用到Xilinx的软件的时候看到的都是“AIX4”的IP,如Vivado打包一个AXI IP的时候,

m0_46642108的博客 8492

C++的四个默认函数(构造函数,析构函数,拷贝函数,赋值函数)

文章目录一. 构造函数二. 析构函数三. 拷贝构造函数1.浅拷贝2.深拷贝四. 赋值函数 在C++中,对于一个类,C++的编译器都会为这个类提供四个默认函数,分别是: A() //默认构造函数 ~A() //默认析构函数 A(const A&) //默认拷贝构造函数 A& operator = (const A &) //默认赋值函数。 这四个函数如果我们不自行定义,将由编译器自动生成这四个缺省的函数,下面让我们来看看这四个函数(重点是后

花狗Fdog的博客 1万+

ThinkBook 16p 2024 BIOS降压定频实战:从解锁CFG Lock到AC Loadline调优

高性能笔记本在满载时频繁撞上温度墙,通常源于固件层默认电压冗余过大,而系统级降压工具又受限于CFG Lock锁定。要根治问题,需要从BIOS固件层面理解电压管理机制——AC/DC Loadline参数控制着CPU在不同负载下的电压请求,通过修改这些负载线值可以安全降低电压,解锁CFG Lock后还能让XTU、ThrottleStop等软件调参工具恢复可用。这种BIOS级调优在工程实践中广泛用于改善散热、稳定频率、压降风扇噪音,尤其适用于联想ThinkBook 16p 2024与拯救者Y9000P等采用HX平

weixin_32496547的博客 385

拷贝构造函数:默认拷贝(浅拷贝)、深拷贝构造函数

 一、 拷贝构造函数与构造函数的区别:      拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)--参考分析1。    拷贝构造函数与构造函数的区别:  class 类名  {  public:  类名(形参参数)//构造函数  类名(类名&对象名)//拷贝构造函数

hongzi的专栏 6877

用Playwright MCP让AI帮你完成所有浏览器自动化

Playwright MCP(Model Context Protocol)是微软基于 Playwright 框架推出的 AI 浏览器自动化新协议。它通过结构化快照数据和自然语言指令结合大型语言模型(如 GPT),实现无需编码的网页交互。无论你是要测试登录流程、抓取价格数据,还是用 AI 远程控制浏览器,Playwright MCP 都能大幅降低门槛,让“说人话”也能驱动自动化脚本。本篇将从功能介绍、技术架构、使用方法到实际场景,带你全面理解这一自动化革命。

todoitbo的博客 3万+

Vue3 - 详细实现流程图编辑器可视化平台示例代码,打造前端web网页流程图在线编辑绘制操作展示,vue3自定义绘制流程图在页面上画流程图功能(提供各种操作按钮及节点控件,界面美观交互式流程图插件)

vue3,绘制流程图,在线流程图制作,在vue3中实现流程图,vue3做一个制作流程图的功能,vue3流程图组件,vue3流程图,流程图绘制展示,vue3流程图可视化在线编辑源码,基于VUE3的在线绘制流程图工具,vue3+logicflow流程图,绘制动态流程图并自定义节点和线,vue使用logicFlow绘制流程图,生成各种流程图图形可连接点移除,基于Vue的流程图组件,工作流程图,流程编辑器,vue3流程组件,vue-flow绘制流程图,绘制流程图示例demo,vue3 logicflow流程图使用教

🏆 前端领域优质创作者 9965

c++的默认拷贝构造函数,从深度拷贝和浅拷贝说起

1. c++类的默认拷贝构造函数的弊端c++类的中有两个特殊的构造函数,(1)无参构造函数,(2)拷贝构造函数。它们的特殊之处在于: (1)当类中没有定义任何构造函数时,编译器会默认提供一个无参构造函数且其函数体为空; (2)当类中没有定义拷贝构造函数时,编译器会默认提供一个拷贝构造函数,进行成员变量之间的拷贝。(这个拷贝操作是浅拷贝)这里只讲拷贝构造函数。在c语言中,int a = 5; /

echo_bright_的博客 4万+

移动机器人路径规划中噪声环境下的鲁棒性测试仿真

设计一个二维或三维环境模型,包括静态障碍物和可能存在的动态障碍物。

amy_mhd的博客 125

构造函数与拷贝构造函数

拷贝构造函数和构造函数不能分开说,他们都是初始化对象的一种方法。但是我们这里用构造函数辅助说明拷贝构造函数,主要说说拷贝构造函数的声明,用途和使用注意事项。 众所周知,构造函数是一个初始化类对象的函数,即使不显示调用,编译器也会隐式调用构造函数初始化类对象。同样的,拷贝构造函数是一种特殊的构造函数,目的也是初始化类对象,同样在不声明的情况下也会隐式调用该函数。而隐式调用拷贝构造函数的时候,我们称...

wufeifan_learner的博客 9167

第七节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - 用户管理(上)

本节的内容是用户管理,后端Python代码的实现。

cuiwin的专栏 775

LeRobot 入门教程(七)数据集

LeRobot Dataset v3.0 是机器人学习数据的标准化格式,支持多模态时间序列数据和视频的统一访问。该版本通过基于文件的存储(Parquet/MP4)、关联元数据和Hub原生流式处理等新特性,显著提升了性能并降低了存储开销。文档详细介绍了格式设计、安装使用、数据记录与加载方法,以及从v2.1迁移到v3.0的步骤,特别针对大型数据集(如DROID 1.0.1)的处理提供了SLURM集群移植方案。v3.0通过优化文件组织和元数据管理,实现了更快的加载速度、更高的内存效率和更好的可扩展性。

2506_90492529的博客 2051

教你如何区分构造函数、普通成员函数、拷贝构造函数以及析构函数

教你如何区分构造函数、普通成员函数、拷贝构造函数以及析构函数

qq_50635297的博客 1023

GEE APP:基于Sentinel-2遥感影像的植被指数(NDVI)和水体指数(NDWI)可视化应用

本文介绍了利用Google Earth Engine(GEE)平台处理Sentinel-2卫星数据的方法,重点讲解NDVI(归一化植被指数)和NDWI(归一化水体指数)的计算与应用。内容包括环境准备、数据加载与处理、指数计算原理、可视化方法以及实际应用案例。教程详细展示了如何定义研究区域、加载影像数据、进行指数运算,并生成专业统计报告和图例。文章还提供了常见问题解答和最佳实践建议,为生态环境监测、农业评估和水资源管理等场景提供了实用工具。通过JavaScript代码示例,读者可以快速掌握GEE平台的遥感影像

此星光明博客 271

C++ || 浅拷贝 深拷贝

文章目录浅拷贝 深拷贝 浅拷贝 深拷贝 //防止浅拷贝 if (NULL != src._name) { //判空 _name = new char[strlen(src._name) + 1]; memset(_name, 0, strlen(src._name) + 1); for (int i = 0; i < strlen(src._name); i++) { _name[i] = src._name[i]; } } else

LQEmptycity的博客 440

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

浅拷贝 ||深拷贝

浅拷贝 ||深拷贝

小茳辞 347

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

关于js中的浅拷贝 || 深拷贝

在js中经常会对一个数据进行拷贝 保留副本,但是在js中有拷贝的指针问题 下面是几点关于深拷贝 浅拷贝的方法 浅拷贝 复杂数据类型拷贝的是地址 浅拷贝都会产生一改全改的问题 变量的赋值 或者是循环obj 数据进行一一赋值 ( 直接声明一个变量讲一个需要拷贝的数据赋值给变量 ) 直接将obj 赋值给了 newObj 但是这两个变量在内存中的指针是一样的, 修改一个另外一个也会改变 (一改全改) es6中的剩余参数 (拷贝的也是地址 ) (一改全改) 运用es6中的Object.assign( )

weixin_48348553的博客 151

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

浅拷贝直接赋值_JS干货||浅拷贝与深拷贝

为了更好的理解js的深浅拷贝,我们先来理解一些js基本的概念数据类型javascript中的数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和复杂的数据类型(也称作引用数据类型-Object)。当一个变量存放基本数据类型时与复杂的数据类型时分别存在以下的特点:基本数据类型的特点:变量直接将基本数据类型的值存储在栈(stack)内...

weixin_39723678的博客 86

浅拷贝&深拷贝|| MutableCopy& Copy

浅拷贝(Shallow Copy)与深拷贝(Deep Copy) 在Objective-C中并不是所有的对象都支持Copy,MutableCopy,遵守NSCopying协议的类才可以发送Copy消息,遵守NSMutableCopying 协议的类才可以发送MutableCopy消息.浅拷贝,并不拷贝对象本身,仅仅是拷贝指向对象的指针; 深拷贝是直接拷贝整个对象内存到另一块内存中 浅拷贝就是指

sinat_34194127的博客 504

【Python】可变、不可变数据||浅拷贝、深拷贝

一、可变、不可变的数据类型 python中主要有6种标准数据类型,分为可变和不可变两类。 不可变类型:该数据类型对象所指定内存中的值不可以被改变 在改变某个对象的值时,由于其内存中的值不可以被改变,所以,会把原来的值复制一份再进行改变,这样就会开辟一段新的内存空间来存储新的值。 可变类型:该数据类型的对象所指定的地址上面的值可以被改变 变量被改变以后,其所指向的内存地址上面的值直接被改变,没有发生复制行为,也没有发生开辟新的内存地址行为,不会重新开辟空间。 二、赋值、浅拷贝、深拷贝区别 首先需要明确,浅

Chose_more的博客 368

【js】浅拷贝 || 深拷贝 引用类型复制解析

深拷贝和浅拷贝的相关知识和实践方式

未央claw 254

C++||构造函数||析构函数||浅拷贝||深拷贝||一些理解||不定期更新||学习笔记

在学习C++过程中的一些理解,这个博客主要从定义和自己的理解来讲,从而加深自己的一些认知。

weixin_45638136的博客 254

拷贝构造函数 || 深拷贝? 浅拷贝?

DeepCopy.cpp#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;cstring&gt; using namespace std; class Person { private: static int Count; char* Country; char* Name; int Age; public: ...

theo_a_sommeil的博客 218

C++ 类的深拷贝与浅拷贝||深拷贝通过重载拷贝构造函数与重载赋值运算符实现

在面向对象程序设计中,对象间的相互拷贝和赋值是经常进行的操作。 如果对象在申明的同时马上进行的初始化操作,则称之为拷贝运算。例如: class1 A("Time"); class1 B=A; 此时其实际调用的是B(A),拷贝构造函数。 如果对象在申明之后,在进行的赋值运算,我们称之为赋值运算。例如: class1 A("Time"); class1 B; B=A

聚精会神搞建设 2645

c++拷贝构造(复制构造函数)详解||浅拷贝和深拷贝||拷贝构造函数的参数能用值传递吗?

1.拷贝构造函数 首先,简单介绍一下拷贝构造函数。拷贝构造函数是构造函数的一种,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。 拷贝构造函数将创建好(已初始化)的对象作为参数,返回一个新的对象。 如果我们没有定义拷贝构造函数,系统会自动生成一个默认的拷贝构造函数。 拷贝构造函数的一般形式如下所示: ClassName(const ClassName& obj...

李志杰的博客 1125

【js】js实现浅拷贝和深拷贝

浅拷贝 在进行拷贝对象的时候,如果属性是对象或者数组,则传递的是引用地址;若对这样的属性进行修改,那么父子对象之间就会发生关联。 1)‘=’赋值,将对象的引用赋值 var a={key1:"11111"} function Copy(p){ var c ={}; for (var i in p){ c[i]=p[i] } return c; } a.key2 = ["小辉","小辉"] var b = Copy(a); b.key3 = "33333" ale

坚强的泡沫的博客 204
上一篇: 浮点数的二进制的阶码
下一篇: 查找OEP PE入口点
cmdhack
博客等级 码龄19年 20粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值