class person
{
public:
person()
{
cout << "person默认函数构造" << endl;
}
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;
}
cout << "person析构函数" << endl;//错误:因为如果利用编译器提供的拷贝函数,会做浅拷贝操作 因为age也会用到这个,浅拷贝会导致堆区的内存重复释放 解决:深拷贝
}
//自己实现拷贝构造函数,解决浅拷贝带来的问题
person(const person& p)
{
cout << "person拷贝构造函数的调用" << endl;
m_age = p.m_age;
//m_height = p.m_height; 编译器默认实现就是这行代码
//深拷贝操作
m_height=new int(*p.m_height);
}
int m_age;
int* m_height;//指针 将该数据开辟到堆区
};
void test01()
{
person p1(18,160);
cout << "p1的年龄:" << p1.m_age <<"身高:" <<*p1.m_height<< endl;
person p2(p1);
cout << "p2的年龄:" << p2.m_age << "身高:" <<* p2.m_height << endl;//删除拷贝后,仍为18,因为系统自动分配,为我们提供拷贝函数
}
int main()
{
test01();