当在堆区创建一份内存空间是,由于需要释放此内存空间,因此需要考虑浅拷贝与深拷贝的问题;
#include<iostream>
using namespace std;
//在堆区创建空间时候需要用到深拷贝
class Person
{
public:
int m_age;
int* m_height;
Person(int age,int height)
{
m_height = new int (height);
m_age = age;
cout << "Person的有参构造函数完毕!" << endl;
}
Person(const Person& p)//拷贝构造函数
{
m_age = p.m_age;
m_height = p.m_height;//编译器默认的拷贝构造函数
//深拷贝
m_height = new int(*p.m_height);//重新在创建一个内存空间
cout << "Person的拷贝构造完毕" << endl;
}
~Person()
{
if (m_height != NULL)
{
delete m_height;
m_height = NULL;
}
cout << "Person的析构函数完毕" << endl;
}
};
void test()
{
Person p1(10,160);
Person p2(p1);
cout << "p1.m_age = " << p1.m_age <<",p1.heigth = " << *p1.m_height << endl;
cout << "p2.m_age = " << p2.m_age <<",p2.heigth = " << *p2.m_height << endl;
}
int main()
{
test();
return 0;
}
#include<iostream>
using namespace std;
//在堆区创建空间时候需要用到深拷贝
class Person
{
public:
int m_age;
int* m_height;
Person(int age,int height)
{
m_height = new int (height);
m_age = age;
cout << "Person的有参构造函数完毕!" << endl;
}
Person(const Person& p)//拷贝构造函数
{
m_age = p.m_age;
m_height = p.m_height;//编译器默认的拷贝构造函数
//深拷贝
m_height = new int(*p.m_height);//重新在创建一个内存空间
cout << "Person的拷贝构造完毕" << endl;
}
~Person()
{
if (m_height != NULL)
{
delete m_height;
m_height = NULL;
}
cout << "Person的析构函数完毕" << endl;
}
};
void test()
{
Person p1(10,160);
Person p2(p1);
cout << "p1.m_age = " << p1.m_age <<",p1.heigth = " << *p1.m_height << endl;
cout << "p2.m_age = " << p2.m_age <<",p2.heigth = " << *p2.m_height << endl;
}
int main()
{
test();
return 0;
}