做网站会用到的代码单词搜索引擎站长平台
如果类的某个成员属性是保存在堆中的话,那么需要重写拷贝构造函数和赋值运算符
注意区分:
重写拷贝构造函数主要是预防下面这种操作:
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;
}
运行结果: