以一段深拷贝与浅拷贝相关代码来讲述
①假设类中构造函数为 Person (const Person p)
main函数中 Person p3(p2)相当于 Person p3 = p2, 运行之后调用了 拷贝函数 Person(const Person p),那么进行参数传入就有 Person p=p2 ,可以发现与开始说的 “Person p3=p2”形式一样。那么Person p=p2 又调用了一次拷贝函数,那么 调用拷贝结果后又是 Person p =p2,然后继续拷贝,进入无限死循环,致使程序出错。
class Person
{
public:
Person()
{
cout << "无参构造函数调用" << endl;
}
Person(const Person &p)
{
m_age = p.m_age;
//m_height = p.m_height; //编译器默认实现的拷贝 代码
//深拷贝操作
m_height = new int(*p.m_height);
cout << "拷贝函数调用" << endl;
}
~Person()
{
if(m_height!=NULL)
{
delete m_height;
m_height = NULL;
}
cout << "析构函数调用" << endl;
}
public:
int m_age;
int *m_height;
};
void test01()
{
Person p1;
Person p3(p2);
cout << "P3的年龄" << p3.m_age << " p3的身高" << *p3.m_height << endl;
}
int main()
{
test01();
}