【C++】产生拷贝构造的三种形式

news2024/11/24 18:37:42

目录

  • 用已存在的类对象去初始化同类另一个对象
  • 当函数类的形参是对象,调用函数形参和实参进行结合
  • 当函数的返回值是对象,函数执行完成返回调用者时

用已存在的类对象去初始化同类另一个对象

Date d1;
Date d2(d1);
Date d3 = d2;	//也会调用拷贝构造

  • 注意赋值号这种拷贝构造,我们说了是已存在的对象初始化另一个未初始化的对象才叫拷贝构造,这与我们后面说的赋值重载有区别。赋值重载是两个对象都已经初始化。
  • 可以看到在实例化对象d2和d3的时候都去调用了拷贝构造,最后它们初始化后的结果都是一样的
    在这里插入图片描述

当函数类的形参是对象,调用函数形参和实参进行结合

void func(Date d)	//形参是类的对象
{
	d.Print();
}

int main(void)
{
	Date d1;
	func(d1);	//传参引发拷贝构造
	
	return 0;
}

  • 我们在类和对象中里面说过,自定义类型传参调用就会发生拷贝构造,形参是实参因为的拷贝,那么这里就调用拷贝构造,然后当func函数执行完后,这个对象d就被析构,然后当main函数执行完后,对象d1也被析构
  • 再次提醒,传引用调用是不会开辟空间进行拷贝的,所以拷贝构造函数用传引用调用。
    在这里插入图片描述

当函数的返回值是对象,函数执行完成返回调用者时

Date func2()
{
	Date d(2023, 3, 24);
	return d;
}

int main(void)
{
	Date d1 = func2();
	d1.Print();

	return 0;
}

  • 可以看到,这一种方式也会引发拷贝构造,当函数内部返回一个Date类的对象时,此时外界再使用Date类型的对象去接收时,就会引发拷贝构造。通过调试可以观察到外界的对象d1确实是以函数内部通过有参构造初始化完后的对象进行拷贝的
    在这里插入图片描述
  • 注意这里不会用临时对象赋值d2,这里是调用的拷贝构造函数返回,而拷贝构造函数参数是const& 类型,引用的别名是和原对象同一快空间,拷贝构造函数根本没返回,返回都不存在,更别说生成临时对象了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谷粒商城实战笔记-168-缓存-SpringCache-整合体验@Cacheable

文章目录 一,168-缓存-SpringCache-整合&体验Cacheable1,引入Spring Cache依赖2,配置3,启用cache4,在查询数据库的方法上加上注解Cacheable5,测试 二,169-缓存-SpringCache-Cacheable细节设…

LeetCode_sql_day16(601.体育馆的人流量)

描述:601. 体育馆的人流量 - 力扣(LeetCode) 编写解决方案找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。 返回按 visit_date 升序排列 的结果表。 输入Stadium表: ----------------------------- | id | visit_date | peop…

Linux系统移植——系统移植初步介绍(一)

一、嵌入式Linux系统软件组成及分布 1.1 内核(Kernel) 功能:负责管理硬件资源、进程调度、内存管理、文件系统、网络等。分布:通常是定制的Linux内核,以适应特定的硬件平台和应用需求。 1.2 根文件系统(…

sql实验代码整理:创建表文件Student、Course、Sc完成下列问题

使用SQL语句创建数据库students. create database students; 创建表文件Student、Course、Sc,表结构如表3-7~表3-9所示。 代码及运行结果: 代码及运行结果: 代码及运行结果: 为表Student 添加地址列Address,数据类型为…

14.3 Matplotlib与Seaborn数据可视化

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

汽车保养系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,门店信息管理,员工信息管理,配件信息管理,保养信息管理,管理员管理,系统管理 微信端账号功能包括:系统首页…

k8s部署ingress-nginx

一、拉取ingress-nginx的安装代码 地址:https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.1/deploy/static/provider/cloud/deploy.yaml 如果上面的地址访问不通的话,可以直接使用下面的内容: 由于官方镜像存放…

Keepalived详解

目录 1、高可用集群keepalived 高可用集群 VRRP 相关概念 keepalived 简介 2、基础实验环境搭建 3、keepalived的虚拟路由管理 全局配置 ​编辑 配置虚拟路由器 4、虚拟路由的通讯设置 5、keepalived的日志分离 6、实现独立子配置文件 7、keepalived的抢占模式和非抢占…

ubuntu 20 安装mysql workbench 过程

ubuntu 20 安装mysql workbench 过程_ubuntu 安装mysql workbench-CSDN博客 How To Install And Use MySQL Workbench On Ubuntu 18.04 or 20.04 MySQL :: Begin Your Download sudo apt install ./mysql-apt-config_0.8.32-1_all.deb snap install mysql-workbench-communi…

【鸿蒙学习】HarmonyOS应用开发者基础 - 从简单的页面开始

学完时间:2024年8月13日 我的纸飞机呀!飞呀飞!飞到了代码中!!! 一、前言叨叨 今天是HarmonyOS学习教学课第一课的第五课内容了,课后练习的人数已经降到了4150人了,预测下到 ”Harmon…

Win10 去掉桌面右上角 了解有关此图片的信息

1. 进入注册表 Win R运行regedit 2. 找到以下路径 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel 3. 新建 DWORD(32位)值(D) 右击 NewStartPanel新建 DWORD…

前端技术day01-HTML入门

一、前端介绍 技术描述HTML用于构建网站的基础结构的CSS用于美化页面的,作用和化妆或者整容作用一样JS实现网页和用户的交互Vue主要用于将数据填充到html页面上的Element主要提供了一些非常美观的组件 二、工具软件 VsCode 在前端领域,有一个公认好用…

C语言问答进阶--6、函数(1)

A:现在我们将研究函数这个概念。 其实这个概念很简单,和中学的时候学的yf(x)来对照着看,对于一个参数x,会得到一个值y,就会发现它和C中的函数是一个道理。 只是C函数中可以包含不传入任何参数的函数。 A:函…

自学嵌入式第十九天高级编程篇 文件2

标准IO的返回值判断 feof:判断文件流指针是否到达结尾。 feof(src) //如果文件流指针到达末尾,函数返回值为真 ferror:判断文件流指针是否出错。搭配clearerr使用可以跳过报错的地方,读取后面的数据 ferror(src) //如…

短视频SDK解决方案,良好的二次开发可扩展性

短视频已成为当代社交与内容消费的重要载体,其影响力与日俱增,面对这一蓬勃发展的市场,如何高效、创新地打造短视频应用,成为众多开发者和企业的核心关切。在此背景下,美摄科技凭借其深厚的技术积累与前瞻性的市场洞察…

奇异值分解(SVD)

1 奇异值分解(SVD)简介 Beltrami 和 Jordan 被认为是奇异值分解(Singular Value Decomposition,SVD)的共同开创者,二人于19世纪70年代相继提出了相关理论。奇异值分解主要解决的问题是数据降维。在高维度的数据中,数据…

什么是流批一体?怎样理解流批一体?

目录 一、流式处理与批量处理概述 1.流式处理 2.批量处理 3.流批一体的定义 二、流批一体的关键特点 三、流批一体的技术实现 四、应用场景 五、实施流批一体的考虑因素 流批一体听起来很简单,但内涵却十分复杂。它包含了计算语义、编程模型、API、调度、执行、shuf…

Halcon玩转机器视觉专栏特殊声明

欢迎来到 PaQiuQiu 的空间 本文为【Halcon玩转机器视觉专栏特殊声明】,方便大家更合理的订阅! 📢 ~特殊声明~ 鉴于很多童鞋在订阅专栏过程中,对于专栏中涉及到的资料(比如中文学习手册)和源码(C#联合Halco…

背包九讲(动态规划)

文章目录 01背包问题题目描述解题思路:上代码:思路2:二维代码:优化代码: 完全背包问题题目描述:解题思路:二维代码:优化代码: 多重背包问题题目描述:解题思路…

有趣的rce漏洞复现分析(1)

目录 eval长度限制突破 第一种方法 第二种方法 无字母数字webshell之命令执行 php7 php5 eval长度限制突破 php eval函数参数限制在16个字符的情况下,如何拿到webshell呢 首先,我们还是先把环境搭好(此次的所有漏洞环境我都部署在Ubu…