浅拷贝:简单的赋值拷贝操作
深拷贝:在堆区申请空间,进行拷贝操作
示例:
#include<iostream>
using namespace std;
class person
{
person()
{
cout<<"默认构造函数"<<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=new int (*p.m_height);
}
~person() //利用析构函数,实现堆区开辟的数据手动释放
{
cout<<"析构函数"<<endl;
if(m_height != NULL)
{
delete m_height;
}
}
public:
int m_age;
int* m_height;
};
void test1()
{
person p1(10,100);
person p2(p1);
cout<<"p1的年龄:"<<p1.m_age<<"身高:"<<*p1.m_height<<endl;
cout<<"p2的年龄:"<<p2.m_age<<"身高:"<<*p2.m_height<<endl;
}
int main()
{
test1();
system("pause");
return 0;
}
如果属性开辟在堆区,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题