深拷贝代码(看这就行)
//自己实现深拷贝
Person(const Person& p)
{
cout << "person拷贝函数调用" << endl;
m_age = p.m_age;
m_height = new int(*p.m_height);
}
课上讲的全部代码
#include<iostream>
using namespace std;
class Person
{
public:
//自己实现拷贝构造函数
Person(const Person& p)
{
cout << "person拷贝函数调用" << endl;
m_age = p.m_age;
m_height = new int(*p.m_height);
}
Person(int age,int height)
{
cout << "Person构造函数调用" << endl;
m_age = age;
m_height = new int(height);
}
~Person()
{
if (m_height != NULL)
{
delete m_height;
m_height = NULL;
}
}
int m_age;
int* m_height;
};
void test01()
{
Person P0(12, 123);
Person P(P0);
cout << "name:" << P.m_age << " height: " << *P.m_height << endl;
}
int main()
{
test01();
}
如果属性有在堆区开辟的, 一定要自己提供深拷贝构造函数, 方式浅拷贝( 堆区重复释放 )的问题