深拷贝与浅拷贝
“Person05::Person05(char *,int)”: 无法将参数 1 从“const char [5]”转换为“char *” Project1
解决方法:右键项目 -> 属性 -> C/C++ -> 语言 -> 符合模式改成“否”
浅拷贝:系统默认提供的拷贝构造,做简单的值拷贝;
如果属性里有指向堆空间的数据,那么简单的浅拷贝会导致重复释放内存的异常。
解决该问题,需要自己提供拷贝构造函数,进行深拷贝。
深拷贝:指向不同的堆空间。拷贝构造:系统提供默认拷贝构造,是简单的值拷贝。
用自己提供的拷贝构造:浅拷贝会释放堆区空间两次挂掉
class Person05 {
public:
Person05() {//默认构造
}
//初始化属性
Person05(char* name, int age) {
m_Name = (char*)malloc(strlen(name) + 1);
strcpy(m_Name, name);
m_Age = age;
}
Person05(const Person05& p) {
m_Age = p.m_Age;
m_Name = (char*)malloc(strlen(p.m_Name) + 1);
strcpy(m_Name, p.m_Name);
}
~Person05() {
cout << "析构函数。" << endl;
if (m_Name != NULL) {
free(m_Name);
m_Name = NULL;
}
}
char* m_Name;
int m_Age;
};
void test5() {
Person05 p1("敌法", 10);
Person05 p2(p1);
}