对象=拷贝构造,有无指针成员的不同之处

news/2024/11/29 4:03:11/

比如类Add,Add A=B:

1、当新声明一个对象并赋初始值时,使用=时,编译器会默认,将B的成员变量,拷贝赋值给B,使用的是浅拷贝,该函数自己不写到类内部时,编译器会默认隐式自带;

Add(const Add& n)

2、假如类内部没有成员是指针类型,编译器的默认拷贝赋值是没有问题的,使用的浅拷贝;

3、假如类内部有成员是指针类型,那么编译器再使用浅拷贝,拷贝指针成员时,仅会将该指针的的值拷贝赋值给目的对象,而指针指向的空间内的数据,不会被拷贝;

这个时候,编译器默认自带的拷贝赋值函数,就不能满足要求,这个时候就需要我们自己,自定义改写这个函数Add(const Add& n);

4、我们写的类成员函数void operator=(Add n),在什么情况下才会被调用呢,只有在前面类对象已经存在,再次拷贝赋值的时候才会调用;

总结:假设B已提前存在

①、

Add A=B:

调用  Add(const Add& n);

②、

Add A;

A = B;

调用  void operator=(Add n);

#include <iostream>using namespace std;class Add
{
public:Add(int n){m_Num = new int;*m_Num = n;}Add(const Add& AA){if(AA.m_Num){m_Num = new int;*m_Num = *AA.m_Num;}else{m_Num = nullptr;}}Add& operator=(Add& AA){if (this == &AA){return *this;}if (AA.m_Num){delete m_Num;m_Num = new int;*m_Num = *AA.m_Num;}else{m_Num = nullptr;}return *this;}~Add(){if (m_Num != NULL){delete m_Num;m_Num = NULL;}}int* m_Num;
};void test01()
{Add n1(10);Add n2(20);n1 = n2;Add n3 = n2;cout << *n1.m_Num << endl;}
int main()
{test01();return 0;
}

显然,编译器默认的隐式拷贝构造函数是不能满足我们的需要的,那么这时,就需要我们自己写拷贝赋值函数了:


http://www.ppmy.cn/news/52105.html

相关文章

Kafka技术基础

Apache Kafka发源于LinkedIn&#xff0c;于2011年成为Apache的孵化项目&#xff0c;随后于2012年成为Apache的主要项目之一&#xff0c;是消息队列的一种实现方式&#xff0c;提供消息的持久化。Kafka使用Scala和Java进行编写。Apache Kafka是一个快速、可扩展的、高吞吐、可容…

Docker部署MySQL主从复制

文章目录 平台说明一、Docker创建网络二、创建MySQL主从容器1.拉取镜像2.查看镜像3.创建启动容器 三、主从配置1.主机配置文件2.从机配置文件3.注意事项4.重启容器5.连接主从数据库主机配置从机配置启动从机复制 四、测试主从复制 平台说明 操作系统&#xff1a;Windows 11 Do…

Amazon Linux2使用kubeadm部署安装K8S集群

环境信息 在AWS上启动3台Amazon Linux2的服务器&#xff0c;服务器配置为2vcpu 和2GB内存 部署K8S集群 1. 修改主机名&#xff08;可选步骤&#xff09; sudo hostnamectl set-hostname master 2.导入k8s的yum仓库密钥 sudo rpm --import https://packages.cloud.google.c…

Android hook实例

hook核心逻辑 hook的基本思路就是 拦截原调用逻辑&#xff0c;加入自己新增的逻辑&#xff0c;然后再执行原逻辑。 技术实现方案通常是 反射 动态代理。 怎么寻找hook点 &#xff1f; hook点的优先级为&#xff1a; 单例>静态类>public final Android常用hook点 …

人机交互有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是几个人机交互领域的SCI期刊推荐&#xff1a; ACM Transactions on Computer-Human Interaction (ACM TOCHI)&#xff1a; 由ACM&#xff08;Association for Computing Machinery&#xff09;出版的人机交互领域的顶级期刊之一&#xff0c;发表关于计算机和人之间相互作…

ROS学习第三十三节——Arbotix使用

https://download.csdn.net/download/qq_45685327/87718484 1.介绍 通过 URDF 结合 rviz 可以创建并显示机器人模型&#xff0c;不过&#xff0c;当前实现的只是静态模型&#xff0c;如何控制模型的运动呢&#xff1f;在此&#xff0c;可以调用 Arbotix 实现此功能。 Arboti…

HDCTF2023复盘

文章目录 前言 CryptoNormal_rsaNormal_rsa(Revenge)(低指数e攻击)Math_RSA(二次剩余)爬过小山的看云(hill,云影) MischardMisc(base64)MasterMisc(crc,wav)ExtremeMisc(zip爆破,明文攻击) Reverseeasy_re(Upx,base64)easyasm(xor) WebWelcome To HDCTF 2023(JSFuck)SearchMast…

Unity 高级程序员应该具备怎样的能力?要怎样成长为 Unity 高级程序员?

如何从零基础小白成长为 Unity 高级程序员&#xff1f;【全篇学习内容免费&#xff01;快来白嫖】 高能预警&#xff0c;下文包含从零基础新手到高级程序员一站式技术学习、学习方法、心态等内容&#xff0c;供各个阶段的同学进行参考。 从零基础到高级程序员 上干货 话不多说…