深拷贝与浅拷贝
系统默认的拷贝构造 会进行简单的值拷贝
如果属性里有指向堆区空间的数据,那么简单的浅拷贝会导致重复释放内存的异常
解决上述问题,需要我们自己提供拷贝构造函数,进行深拷贝
#define _CRT_SECURE_ND_WARNINGS
#include<iostream>
using namespace std;
class Person
{
public:
Person()
{}
//初始化属性
Person( char * name,int age)
{
m_Name = (char*)malloc(strlen(name) + 1);
strcpy(m_Name, name );
m_age = age;
}
//拷贝构造 系统会默认提供拷贝构造,而且是简单的值拷贝
//自己提供拷贝构造,原因,简单的浅拷贝会释放堆区间两次,导致系统崩溃
//深拷贝
Person(const Person& p)
{
m_age = p.m_age;
m_Name = (char*)malloc(strlen(p.m_Name) + 1);
strcpy(m_Name, p.m_Name);
}
~Person()
{
cout << "析构函数调用" << endl;
if (m_Name != NULL)
{
free(m_Name);
m_Name = NULL;
}
}
//姓名
char * m_Name;
//年龄
int m_age;
};
void text01()
{
Person p1("羽衣",10);
Person p2(p1);//调用了拷贝构造
}
int main()
{
system("pause");
return EXIT_SUCCESS;
}
代码有点问题我不知道该怎么该,如果有人可以改正的话,可以私信我,我再改,谢谢啦