浅拷贝:简单的赋值操作拷贝
深拷贝:在堆区重新申请空间,进行拷贝操作
浅拷贝带来的问题是堆区内存重复释放。可利用深拷贝解决。
注意:如果类属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题!
#include <iostream>
using namespace std;
class Person
{
public:
int m_age;
int *m_Height;
Person(){cout<<"无参构造函数"<<endl;}
Person(int age,int height)
{
this->m_age=age;
this->m_Height=new int(height);
cout<<"有参构造函数"<<endl;
}
~Person()
{
if(this->m_Height!=NULL)
{
delete(m_Height);
this->m_Height==NULL;
}
cout<<"析构函数"<<endl;
} //将堆区数据释放
//自己实现拷贝构造函数 解决浅拷贝带来的问题
Person(const Person &p)
{
cout<<"拷贝构造函数"<<endl;
m_age=p.m_age;
// m_Height=p.m_Height; 编译器默认实现的代码
//深拷贝操作
m_Height=new int(*p.m_Height);
}
};
void func1()
{
Person p1(18,170);
cout<<p1.m_age<<" "<<*p1.m_Height<<endl;
Person p2(p1);
}
int main()
{
func1();
return 0;
}