#define _CRT_SECURE_NO_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 test01()
{
Person p1("安安", 9);
Person p2(p1); //调用拷贝构造
}
int main() {
test01();
system("pause");
return EXIT_SUCCESS;
}
C++ 深拷贝和浅拷贝
最新推荐文章于 2024-03-29 20:39:46 发布