赋值运算符重载=赋值本身时存在问题
如p1= p1;
#include<iostream>
using namespace std;
class Person
{
public:
Person(int a )
{
m_Age = new int (a); // new int 返回 int *指针
}
~Person()
{
if (m_Age != NULL)
{
delete m_Age;
m_Age = NULL;
}
}
Person& operator=(Person &p)
{
if (m_Age != NULL)
{
delete m_Age;
m_Age = NULL;
}
m_Age = new int (*p.m_Age); // 这一行重要p.m_Age是一个指针,指向传入的值,
//再解引用,新开一个空间使m_Age指向这个值而不是指向指针
return *this;
}
int *m_Age;
};
void test01()
{
Person p1(55);
Person p2(20);
Person p3(30);
// p3 = p2 = p1; //赋值操作
p1 = p1;
cout << "p1的年龄为:" << *p1.m_Age << endl;
cout << "p2的年龄为:" << *p2.m_Age << endl;
cout << "p3的年龄为:" << *p3.m_Age << endl;
}
main()
{
test01();
system("pause");
return 0;
}
if (m_Age != NULL)
{
delete m_Age;
m_Age = NULL;
}
把这段代码注释了就不报错,看起来像是拷贝之前把自身删除了
那么这段代码的必要性在哪能体现出来,或者怎么解决?