0
点赞
收藏
分享

微信扫一扫

C++笔记:拷贝构造函数

小禹说财 2022-03-12 阅读 84
c++

//构造函数本质是初始化操作
//拷贝构造函数,是对这个类再复制一份

#include <iostream>
using namespace std;

//拷贝构造函数
class person{
public:
	//浅拷贝,系统会默认一个浅拷贝的构造函数,但以下深拷贝会出现错误,原因是拷贝的内容已经被下面的拷贝的析构函数释放,
	//导致原本类的析构函数的无法释放
	person(int m_age,int m_high){
		age = m_age;
		//				解引用
		high = new int(m_high);
	}

	~person(){
		delete high;
		high =  NULL;
	}

	int age;
	int *high;
};

void test()
{
	person p1(18,166);
	person p2(p1);
	cout << "Pl的年龄为" << p1.age << " P1的身高为" << p1.age << endl;
	cout << "P2的年龄为" << p2.age << " P2的身高为" << p2.age << endl;

}


int main()
{
	test();

	//system("pause");
	return 0;
}
浅拷贝,系统会默认一个浅拷贝的构造函数,
但以上面的拷贝构造函数会出现错误,
原因是拷贝的内容已经被下面的拷贝的析构函数释放,
导致原本类的析构函数的无法释放
释放了同一块内存

在这里插入图片描述
解决如下:

#include <iostream>
using namespace std;

//拷贝构造函数
class person{
public:

	//构造函数本质是初始化操作
	person(int m_age,int m_high){
		age = m_age;
		high = new int(m_high);
	}

	//深拷贝操作
	person(const person &p){
		age = p.age;
		//返回为指针类型    解引用
		high   =   new int(*p.high);
	}



	~person(){
		delete high;
		high =  NULL;
	}



	int age;
	int *high;
};

void test()
{
	person p1(18,166);
	person p2(p1);
	cout << "Pl的年龄为" << p1.age << " P1的身高为" << p1.age << endl;
	cout << "P2的年龄为" << p2.age << " P2的身高为" << p2.age << endl;

}


int main()
{
	test();

	//system("pause");
	return 0;
}
举报

相关推荐

0 条评论