1.深拷贝:在堆区重新申请空间,进行拷贝操作
2.浅拷贝:简单的赋值拷贝操作,其带来的问题就是堆区的内存重复释放,要利用深拷贝来解决。
3.如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题
#include<iostream>
using namespace std;
//深拷贝和浅拷贝
class Person
{
public:
Person()
{
cout << "Person的默认构造函数调用" << endl;
}
Person(int age,int height)
{
m_age = age;
m_height=new int(height);
cout << "Person的有参构造函数调用" << endl;
}
//自己实现拷贝构造函数,解决浅拷贝带来的问题
Person(const Person &p)
{
cout << "Person拷贝构造函数的调用" << endl;
m_age = p.m_age;
//m_height = p.m_height;这一句是编译器默认实现
m_height = new int(*p.m_height);
}
~Person()
{
//析构代码将堆区开辟数据做释放操作
if (m_height != NULL)
{
delete m_height;
m_height = NULL;
}
cout << "Person的析构函数调用" << endl;
}
int m_age;
int *m_height;
};
void test1()
{
Person p1(18,180);
cout << "p1的年龄为:" << p1.m_age <<" p1的身高为:"<<*p1.m_height <<endl; //
Person p2(p1);
cout << "p2的年龄为:" << p2.m_age << " p2的身高为:" << *p2.m_height << endl; //
}
int main()
{
test1();
//cout << endl;
system("pause");
return 0;
}