C++之深拷贝和浅拷贝*
两者本质:
浅拷贝:简单的赋值拷贝操作
深拷贝:在堆区中重新申请空间,进行拷贝操作new & delete
注意事项:堆区是在地址中重新申请空间,所以后续一系列操作new delete是通过指针* age进行操作(解决拷贝操作中指针复制时,产生的堆区指针地址重复释放的问题)
有参构造:指针需要手动开辟堆区new
拷贝操作:
1.参数格式
2.开辟内容int *(主要看传入的是什么)
#include<iostream>
using namespace std;
class Person
{
public:
int age;
int *weight;
//有参构造
Person(int a,int w){
age = a;
weight = new int(w); //指针属性要手动开辟new!!!!
cout << "有参构造" << endl;
}
//拷贝操作
//const防止对引用数据的意外修改
Person(const Person &p)
{
//浅拷贝
/*age = p.age;
weight = p.weight;*/
//深拷贝
age = p.age;
weight = new int(*p.weight);//new一个体重指针int大小的堆区
}
//析构函数
~Person()
{
if (weight != NULL)
{
delete weight;
weight = NULL;
}
cout << "Person析构函数调用" << endl;
}
};
//int main()
//{
// Person p1(22, 90);
// cout << "p1的年龄和体重" << p1.age << " " << *p1.weight << endl;
//
// Person p2(p1);
// cout << "p2的年龄和体重" << p2.age << " " << *p2.weight << endl;
//
//
// system("pause");
// return 0;
//}