c++之深拷贝和浅拷贝

一、拷贝构造函数

拷贝构造函数是什么?

当用另一个对象来实例化一个新的对象时,调用的不是我们之前定义的普通构造函数,而是调用拷贝构造函数。我们可以拷贝构造函数中将要拷贝的对象的一些数组成员复制新的实例化对象。

简而言之,拷贝构造函数用于对象的复制。

定义格式
类名(const 类名&变量名)

Student(const Student &stu) //其中stu是被拷贝的对象变量名

Student stu1;
Student stu2=stu1;//执行拷贝构造函数
Student stu3(stu1);//执行拷贝构造函数

二、浅拷贝

浅拷贝就是简单的复制数据成员

class Student
{
	public:
		Student();
		Student(const Student& stu){
		age=stu.age;
		score=stu.score;
	}
	private:
		int age;
		int score;
};

三、深拷贝

深拷贝涉及到数据成员是指针,为了不让拷贝后的指针指向同一片区域,我们不能简单地把指针拷贝,而是拷贝指针指向的内存的内容

class Student
{
public:
	Student()
	Student(const Student& stu){
		age=stu.age;
		subjectsScore = new int[7];
		for(int i=0;i<7;i++)
		{subjectsScore[i]=stu.subjectsScore[i];}
	}
private:
	int age;
	int *subjectsScore;
};

补充

拷贝构造函数什么时候调用

  • 用一个对象去初始化另一个对象时候调用拷贝构造函数
  • 当类对象作为形参时候,会调用拷贝构造函数
  • 当类对象作为返回值的时候,会拷贝构造函数

这就是为什么拷贝构造函数里面要用引用
Student(const Student &stu)
如果不用引用去定义拷贝构造函数,那么对象作为形参又会调用拷贝构造函数,如此套娃,就不行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值