类和对象 第二部分第五小节:深拷贝和浅拷贝

浅拷贝:简单的赋值拷贝操作

例如:系统中的拷贝构造函数就是浅拷贝,仅赋值,但地址没有复制,指向的还是同一片地址

#include 
using namespace std;
class person {
public:
	person()//创建无参构造函数
	{
		cout << "无参构造函数person调用" << endl;
	}
	person(int age,int height)
	{
		cout << "有参构造函数的调用" << endl;
		m_age = age;
		m_height = new int(height);
	}
	person(const person& p)
	{
		cout << "拷贝函数的调用" << endl;
		m_age = p.m_age;
		m_height = p.m_height;
	}
	~person()
	{
		//将堆区开辟的数据释放
		if (m_height != NULL)
		{
			delete m_height;
			m_height = NULL;
		}
		cout << "析构函数person的调用" << endl;
	}
	int m_age;
	int* m_height;
};
void test02()
{
	person p1(18,190);
	cout << "年龄为" << p1.m_age << "身高为" << p1.m_height << endl;
	person p2(p1);
	cout << "年龄为" << p2.m_age << "身高为"<

效果图:直接报错,因为堆区内存给释放了两次,属于非法操作

类和对象 第二部分第五小节:深拷贝和浅拷贝_第1张图片

额外:析构代码用途:在new一个对象后,在结束时手动将其释放时使用

深拷贝:在堆区重新申请空间,进行拷贝操作

类和对象 第二部分第五小节:深拷贝和浅拷贝_第2张图片

代码成功实现功能不报错

类和对象 第二部分第五小节:深拷贝和浅拷贝_第3张图片

注意:如果有属性在堆区开辟的,一定要自己创造一个深拷贝函数,防止浅拷贝带来的问题

你可能感兴趣的:(#,C++核心编程,c++,算法,开发语言)