浅拷贝
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>;
using namespace std;
class Nick {
public:
//初始化属性
Nick(char *name, int id) {
m_name = (char*)malloc(strlen(name) + 1);
strcpy(m_name, name);
m_age = id;
}
~Nick() {
if (m_name != NULL) {
free(m_name);
m_name = NULL; //防止野指针
}
cout << "析构函数调用" << endl;
}
int m_age; //放在栈上
char *m_name; //放在堆上
};
void test01() {
Nick p1("渣渣猫", 180618);
Nick p2(p1); //调用拷贝构造
}
int main() {
test01();
system("pause");
return 0;
}
系统会提供默认拷贝构造,而且是简单的值拷贝
简单的浅拷贝会释放堆区空间两次,导致挂掉
深拷贝
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>;
using namespace std;
class Nick {
public:
//拷贝构造 系统会提供默认拷贝构造,而且是简单的值拷贝
Nick(const Nick& nick) {
m_name = (char*)malloc(strlen(nick.m_name) + 1);
strcpy(m_name, nick.m_name);
m_age = nick.m_age;
}
~Nick() {
if (m_name != NULL) {
free(m_name);
m_name = NULL; //防止野指针
}
cout << "析构函数调用" << endl;
}
int m_age; //放在栈上
char *m_name; //放在堆上
};
void test01() {
Nick p1("渣渣猫", 180618);
Nick p2(p1); //调用拷贝构造
}
int main() {
test01();
system("pause");
return 0;
}