如果类的某个成员属性是保存在堆中的话,那么需要重写拷贝构造函数和赋值运算符
注意区分:
重写拷贝构造函数主要是预防下面这种操作:
Person p1(18); Person p2(p1);
重写赋值运算符主要是预防下面这种操作:
Person p1(18); Person p2(20); Person p3(30); p3=p2=p1;
示例:
#include <iostream>
using namespace std;
class Person{
public:
Person(int age)
{
this->age=new int(age);
}
~Person(){
if (age!=NULL)
{
delete age;
age=NULL;
}
}
Person(const Person& p)
{
age=new int(*p.age);
cout<<"拷贝构造函数"<<endl;
}
Person&operator=(Person &p)
{
if (age!=NULL)
{
delete age;
age=NULL;
}
age=new int(*p.age);
return *this;
}
public:
int* age;
};
int main()
{
Person p1(18);
Person p2(20);
Person p3(30);
p3=p2=p1;
cout<<*p1.age<<endl;
cout<<*p2.age<<endl;
cout<<*p3.age<<endl;
return 0;
}
运行结果: