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

拷贝构造函数:特殊的构造函数,用户未定义拷贝函数的情况下,系统自动创建一个隐式的默认拷贝构造函数,它将已经存在的对象中的数据成员逐个的拷贝到新创建的对象中。

自定义拷贝构造函数格式:   类名(const 类名 & 引用名)   

会调用拷贝函数的三种情况:

(1)使用一个类对象出初始化另一个类的对象

(2)使用类的对象作为函数的形参,调用函数时

(3)函数的返回值为类的对象时

什么情况下要重写拷贝构造函数:当类中含有指针成员变量时。

浅拷贝:对象a与b中的指针成员变量指向同一个地址,就是浅拷贝。对对象a进行操作时,对象b也会受影响

如果我们使用对象a对b进行初始化时,使用默认的拷贝构造函数就会出现浅拷贝的问题,所以需要我们重写拷贝构造函数。

深拷贝:对象a与对象b中指针成员变量指向不同的地址,但是它们的值是相同的,完成拷贝的同时,a与b也不会影响彼此

看完下面的代码试着运行就会懂了

#include <iostream>
using namespace std;
class CA{
public:
	int a;
	int *p;
	CA(){
		a = 1;
		p = &a;
	}
	CA(const CA& temp){
		cout << "调用拷贝构造" << endl;
		this->a = temp.a;
		this->p = new int(*temp.p);//深拷贝
		//this->p=*temp.p;//浅拷贝
	}
};
int main()
{
	CA ca1;
	CA ca2 = ca1;
	cout << "ca1: " << ca1.a << " " << *ca1.p <<endl;
	cout << "ca2: " << ca2.a << " " << *ca2.p <<endl;
	ca1.a = 2;
	cout << "ca1: " << ca1.a << " " << *ca1.p << endl;
	cout << "ca2: " << ca2.a << " " << *ca2.p << endl;
	return 0;
}
发布了107 篇原创文章 · 获赞 31 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/love_phoebe/article/details/99328584