//构造函数本质是初始化操作
//拷贝构造函数,是对这个类再复制一份
#include <iostream>
using namespace std;
//拷贝构造函数
class person{
public:
//浅拷贝,系统会默认一个浅拷贝的构造函数,但以下深拷贝会出现错误,原因是拷贝的内容已经被下面的拷贝的析构函数释放,
//导致原本类的析构函数的无法释放
person(int m_age,int m_high){
age = m_age;
// 解引用
high = new int(m_high);
}
~person(){
delete high;
high = NULL;
}
int age;
int *high;
};
void test()
{
person p1(18,166);
person p2(p1);
cout << "Pl的年龄为" << p1.age << " P1的身高为" << p1.age << endl;
cout << "P2的年龄为" << p2.age << " P2的身高为" << p2.age << endl;
}
int main()
{
test();
//system("pause");
return 0;
}
浅拷贝,系统会默认一个浅拷贝的构造函数,
但以上面的拷贝构造函数会出现错误,
原因是拷贝的内容已经被下面的拷贝的析构函数释放,
导致原本类的析构函数的无法释放
释放了同一块内存
解决如下:
#include <iostream>
using namespace std;
//拷贝构造函数
class person{
public:
//构造函数本质是初始化操作
person(int m_age,int m_high){
age = m_age;
high = new int(m_high);
}
//深拷贝操作
person(const person &p){
age = p.age;
//返回为指针类型 解引用
high = new int(*p.high);
}
~person(){
delete high;
high = NULL;
}
int age;
int *high;
};
void test()
{
person p1(18,166);
person p2(p1);
cout << "Pl的年龄为" << p1.age << " P1的身高为" << p1.age << endl;
cout << "P2的年龄为" << p2.age << " P2的身高为" << p2.age << endl;
}
int main()
{
test();
//system("pause");
return 0;
}