C++编译器至少给一个类添加4个函数
1.默认构造函数无参,函数体为空
2.默认析构函数无参,函数体为空
3.默认拷贝沟早函数,对属性进行值拷贝
4.赋值运算符“operator=”,对属性进行值拷贝
如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题
代码案例:
#include <iostream>
#include <string>
using namespace std;
class Person
{
public:
Person(int age)
{
//将年龄数据开辟到堆区
m_Age = new int(age);
}
~Person()
{
if (m_Age != NULL)
{
delete m_Age;
m_Age = NULL;
}
}
//年龄的指针
int* m_Age;
};
void test01()
{
Person p1(18);
Person p2(20);
p2 = p1; //赋值操作
cout << "p1的年龄为:" << *p1.m_Age << endl;
cout << "p2的年龄为:" << *p2.m_Age << endl;
}
int main() {
test01();
system("pause");
return 0;
}
代码运行后会出现错误
原因是p2赋值给p1的时候,只复制了值而没有复制地址,仅仅实现浅拷贝,导致被delete后,内存地址给清空了两遍,发生错误
代码增添:添加成员函数