在利用编译器提供的默认拷贝构造函数时,默认的拷贝构造函数是浅拷贝。
(浅拷贝)也就是说,当成员变量是存在于堆中的情况下,默认拷贝构造函数(浅拷贝)只复制引用。
这样的话,在析构函数中释放 (delete) 堆中的成员变量时就会出现问题
所以为了解决这一问题,将浅拷贝修改成深拷贝,即在拷贝的过程中相对的也在堆中开辟新的空间,此时再进行赋值,这样的拷贝就是深拷贝。
这样在析构函数释放资源时就不会出现问题了。
#include <iostream>
using namespace std;
class Person
{
public:
//无参构造函数
Person()
{
cout << "Person 的无参构造函数"<< endl;
}
//有参构造函数
Person(int age ,int height)
{
p_Age = age;
p_Height = new int(height);
cout << "Person 的有参构造函数" << endl;
}
//拷贝构造函数
Person(Person *p)
{
p_Age = p->p_Age;
p_Height = new int(*(p->p_Height));
cout << "Person 的拷贝构造函数" << endl;
}
int getHeight()
{
return *p_Height;
}
~Person()
{
if (p_Height != NULL)
{
delete p_Height;
p_Height = NULL;
}
cout << "Person 的析构函数" << endl;
}
private:
int p_Age;
int* p_Height;
};
void run()
{
Person p(18, 180);
Person p2(&p);
cout << "p2的身高是:" << p2.getHeight() << endl;
}
int main()
{
run();
system("pause");
return 0;
}