C++拷贝构造函数

物联网技术-第2章-物联网技术架构 • 物联网具有很强的异构性• 为实现异构设备之间的互联、互通与互操作,物联网需要以一个开放的分层的可扩展的为框架。 阅读详情

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

如上图可以看出Date()和Date(const Date& d1)互相构成重载函数

2.拷贝构造函数参数的定义 

拷贝构造函数的第一个参数必须是类类型对象的引用,如上图所示,const Date& d1是拷贝函数的第一个参数,拷贝函数也可以有多个参数,但第一个参数后面的参数必须都有缺省值

3.拷贝构造的无穷递归

当我们用传值传参的方式定义拷贝函数的第一个参数,当我们调用拷贝函数就会发生拷贝构造的无穷递归。

首先我们要明白一个点:传值传参是通过拷贝函数,将实参的数据拷贝给形参,所以传值传参会涉及到拷贝函数的调用,但是!!!!你的拷贝函数的形参也是传值传参!!!!!,所以当你在调用构造函数时,也会再调用另一个拷贝构造函数,然后无穷一直调用一直调用。造成了无穷递归。

4.拷贝函数的深浅拷贝

1.浅拷贝

当我们进行对象传值传参时,如果我们没有定义拷贝函数,那么编译器自动生成的拷贝函数会帮助我们拷贝内置类型.但是这种拷贝是针对于内置类型没有指向系统任何资源的,如果有内置类型指向了系统的某块空间那么编译器自动生成的构造函数还会有用吗,让我们来一步一步分析。

 

我们看上面的图,当程序进行将拷贝函数进行完时,S1和S2的内置类型保持一直,但这样看上去好像没什么问题是吧,但是我们想想,当我向系统申请空间用完了之后是不是要释放空间呐,那我们再写一个析构函数防止这个程序内存泄漏看看。 

当我们写了一个析构函数再运行程序时便会出现错误,为什么。

你们看这S1和S2确实是拷贝了,但是那个指针指向的地址也被拷贝了,当我析构一个对象时,这个对象的指针指向的空间已经,被释放了,那我们再析构一个对象复制的对象时,这块空间已经被释放了,再释放就会发生报错。所以这就是浅拷贝,是将内置类型变量一个字节一个字节地进行拷贝,当我们有系统资源的申请时,我们就需要使用深拷贝了 

2.深拷贝

深拷贝我们需要用到一个函数mencpy,知道这个函数用法就知道

我们不能像浅拷贝那样一个字节一个字节进行拷贝,我们需要将数据直接拷贝到对象中,所以我们需要memcpy

像这样就不会发生报错。

5.野引用

传值传参返回会产生一个临时变量,然后调用拷贝函数,将对象的数据拷贝进这个临时对象中。但是如果我们用传值引用返回,是不会产生拷贝的,这个引用只是一个别名,当引用的对象在一个局部的函数中时,这个函数结束,那么这个对象就销毁了,那么它的引用就不知道引用谁了,就造成了野引用,就和野指针差不多,传引用返回可以减少拷贝函数的调用,但一定要确保,函数结束引用的对象还在,才能用引用返回。

5分钟快速上手:用AI生成3D虚拟场景的保姆级教程 你是否想过:不用学复杂的3D建模软件,不用懂“多边形”“UV贴图”这些专业术语,也能快速生成一个梦幻的森林、未来感的城市,甚至外太空基地?本文的目的就是教完全没接触过3D技术的新手,用AI工具5分钟生成3D虚拟场景。我们会覆盖主流AI工具的选择、提示词编写技巧、生成后的简单调整,以及常见问题解决。本文会像“游戏任务指南”一样,从“认识工具”→“写提示词”→“生成场景”→“调整优化”逐步讲解,最后还会教你把生成的3D场景用起来!提示词:你给AI的“订单备注”,越详细效果越好。扩散模型。 阅读详情

相关推荐

博流BL602开发二 环境搭建与固件烧录实战

本文详细介绍了博流BL602 RISC-V芯片开发环境的搭建与固件烧录全流程。从Linux/WSL系统选择、RISC-V工具链配置、SDK获取,到编译首个Wi-Fi示例并生成固件镜像,再到通过命令行或图形化工具完成烧录及串口测试,提供了完整的实战指南和常见问题解决方案。

weixin_29175469的博客 449

C++拷贝构造函数(复制构造函数)

一、拷贝构造函数的形式 复制构造函数是构造函数的一种特殊情况。因为类的对象包含各种成员变量,在发生拷贝时不能和普通对象一样来拷贝,所以我们需要使用拷贝构造函数来进行对象拷贝。拷贝构造函数只有一个参数,参数类型是本类的引用。 如果构造函数没有显式定义,那么编译器将会自动生成拷贝构造函数。大多数情况下,其作用是实现从源对象到目标对象逐个字节的复制,即使得目标对象的每个成员变量都变得和源对象相等。 ...

枝头 3060

ESP32 LVGL开发板例程使用记录:自制常用汉字字库(二)

1、将下载的文件移入工程文件中 ,路径为项目文件中 ”......\lib\lvgl\src\font“文件夹下。3、修改字库配置文件,文件名为lv_conf.h中的内容,向其中加入下面内容(位置可搜索注释块来找到地方)修改完成可以编译试试,看是否成功,如字库较大时编译出错,请使能:LV_FONT_FMT_TXT_LARGE。2、打开此文件,修改包含头文件的路径,不然会报错,修改方法可对照自己库中其他字库文件中的包含路径。导入完成后在VSCode工程中可以查看到此文件。上次说完了如何制作 字库.c 文件。

qq_43279097的博客 1955

复制构造函数

复制构造函数是构造函数的一种,也称拷贝构造函数,它只有一个参数,参数类型是本类的引用。 复制构造函数的参数可以是 const 引用,也可以是非 const 引用。 一般使用前者,这样既能以常量对象(初始化后值不能改变的对象)作为参数,也能以非常量对象作为参数去初始化其他对象。一个类中写两个复制构造函数,一个的参数是 const 引用,另一个的参数是非 const 引用,也是可以的。 如果类的设计者不写复制构造函数,编译器就会自动生成复制构造函数。大多数情况下,其作用是实现从源对象到目标对象逐个字节的复制,即

weixin_43495111的博客 528

Windows11安装UE4+Airsim

Windows11安装UE4+Airsim

Legendyyy的博客 3743

3GPP协议解读_物理层系列(一)_物理层协议怎么看?

5G NR相关协议一般都在38系列,点进去以后可以看到,38.2xx系列为物理层相关协议,为了掌握物理层相关知识,应该怎么看协议呢?我建议从38.201读起,对38.2xx系列协议有一个整体的把握。

JCMLSY的博客 1327

拷贝构造函数详解

拷贝构造函数 拷贝构造函数是构造函数的一种, 也称复制构造函数, 只有一个参数, 参数类型是该类的引用. [拷贝构造函数的参数可以是 const 引用,也可以是非 const 引用。 一般使用前者,这样既能以常量对象(初始化后值不能改变的对象)作为参数,也能以非常量对象作为参数去初始化其他对象。一个类中可以同时存在这两种类型的拷贝构造函数(一个的参数是 const 引用,另一个的参数是非 const 引用)]。 拷贝构造函数的作用: 作用是使用类中已经创建好的对象来初始化新创建的对象 拷贝构造函数的注意要点

weixin_42562387的博客 1万+

直流电机双闭环调速系统MATLAB仿真

Chopper-Fed DC Motor Drive This example shows a Chopper-Fed DC Motor Drive. Description The DC motor is fed by the DC source through a chopper which consists of GTO thyristor and free-wheeling diode ...

飞行动力的博客 2万+

C++基础——拷贝构造函数

C++类成员函数之拷贝构造函数

weixin_69283129的博客 2万+

【报错】open /var/lib/docker/tmp/docker-import-863402796/bin/json: no such file or directory

然后,通过docker images可以看到镜像已经加载进来了。然后,通过docker images可以看到镜像已经加载进来了。

静谧、淡雅 6222

基于Vision Transformer的鸟类图像分类(200个类别)完整代码+数据

基于Vision Transformer的鸟类图像分类(200个类别)完整代码+数据

1727

CPP-基础:C++拷贝构造函数详解

一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: 1 int a = 100; 2 int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 1 #include <iostream> 2 using namespac...

dixiongbi7761的博客 146

结构光之相移法+多频外差的数学原理推导

‍论文:基于数字光栅投影的结构光三维测量技术与系统研究 [博]作者:李中伟 华中科技大学 2007功能:相移法:多频外差(三频N步相移法)01 相移法图1 待写入投影仪的理想N步相移条纹通常对于 步相移来说,生成第 幅条纹图像(如图1所示)的公式如下:402 Payment Required其中::背景光强:调制强度:像素点横向坐标:相移值图2 相机拍摄到的实际 N ......

3D视觉工坊 1188

C++——拷贝构造函数

(用旧对象去构造新对象)拷贝构造函数,又称复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构造及初始化。值类型(不行,会产生递归);指针类型(能实现要求,但会出现歧义(感觉a的地址给b构造));引用类型(本类对象的const引用)。其唯一的形参必须是引用,但并不限制为const,一般普遍的会加上const限制。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。

weixin_59179454的博客 2万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

cpp拷贝构造函数

1.当类含有指针时,必须自定义拷贝构造函数。 坑点: class DoubleTest { double *d; public: DoubleTest() :d(new double(123)) { cout << "constructor" << endl; } //DoubleTest(cons

wjxuanxuan的博客 928

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

cpp--拷贝构造函数详解

本文详细解释了cpp中的拷贝构造函数,包括定义和使用方法,也帮大家规避了一些易错点

2302_80295520的博客 1069

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C++拷贝构造函数的调用时机

C++拷贝构造函数的调用时机 一、拷贝构造函数调用的时机 ​ 当以拷贝的方式初始化对象时会调用拷贝构造函数,这里需要注意两个关键点,分别是以拷贝的方式和初始化对象 1. 初始化对象 初始化对象是指,为对象分配内存后第一次向内存中填充数据,这个过程会调用构造函数,对象被创建后必须立即初始化。也就是说只要创建对象就会调用构造函数。 2.初始化和赋值的区...

一 6016

19 CPP拷贝构造函数

如果类中重载了拷贝构造函数却没有定义默认的拷贝构造函数,编译器会提供默认的拷贝构造函数,这一点和普通构造函数不一样。函数以值的方式返回对象时,可能会调用拷贝构造函数(VS会调用,Linux不会,g++编译器做了优化) 代码说明。但是重载的时候,形参中一定要有类本身的常引用,如果形参中没有类本身的常引用,那就成了普通构造函数。类名(.....,const 类名& 对象名,.....){......}拷贝构造函数可以重载,可以有默认参数。

wade1010的专栏 248

【C++ | 拷贝构造函数】一文了解C++的 拷贝(复制)构造函数

👉本文介绍C++的拷贝构造函数,为什么需要拷贝构造函数,什么是拷贝构造函数,怎么使用拷贝构造函数,默认拷贝构造函数。

wkd_007的博客 9727

C++拷贝构造函数详解

在C++中,拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,并将其初始化为现有对象的副本。拷贝构造函数的函数名必须与类名相同,并且参数为该类的一个常引用。拷贝构造函数是一种特殊的构造函数,用于创建对象的副本。他接受一个同类型的对象(本类对象的引用)作为参数,并使用该对象的数据来初始化新对象。拷贝构造函数通常用于在程序中复制对象,以便在不修改原始对象的情况下对其进行操作。拷贝构造函数通常会执行深拷贝操作,即复制指针指向的数据,而不是仅仅复制指针本身。

m0_62573214的博客 4073

C++ —— 拷贝构造函数

C++ —— 拷贝构造函数

MaoSiri的博客 744

C++ 拷贝构造函数

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。这句话的意思是在利用拷贝构造函数创建一个新的对象时,是通过复制现有对象的数据来初始化新对象。所以说,新对象将成为现有对象的副本。

qq_51753728的博客 917

c++中拷贝构造函数被调用的时机

拷贝构造函数被调用的几种情况: (1)当用类的一个对象去初始化该类的另一个对象时,系统会自动调用拷贝构造函数; (2)将一个对象作为实参传递给一个非引用类型的形参,系统会自动调用拷贝构造函数; (3)从一个返回类为非引用的函数返回一个对象时,系统会自动调用拷贝构造函数; (4)用花括号列表初始化一个数组的元素时,系统会自动调用拷贝构造函数。 下面逐个举例: 1 当用类的一个对象去初始化该类的另一个对象时,系统会自动调用拷贝构造函数 #include<ctime> #include

StudyWinter的博客 7327
上一篇: C++构造函数和析构函数
下一篇: C++赋值运算符重载
Arcane Code
博客等级 码龄3年 598粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值