#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Name {
public:
Name(const char* mp) {
m_len = strlen(mp);
m_p = (char *)malloc(m_len + 1);
strcpy(m_p, mp);
}
//Name obj2 = obj1;
// 编写copy构造函数 使用深拷贝
Name(const Name& obj1) {
m_len = obj1.m_len;
m_p = (char*)malloc(m_len + 1);
strcpy(m_p, obj1.m_p);
}
~Name(){
if (m_p != NULL) {
free(m_p);
m_p = NULL;
m_len = 0;
}
}
private:
char* m_p;
int m_len;
};
// 对象析构时出现问题
void objmain() {
Name obj1("abcd");
Name obj2 = obj1; // 默认copy构造函数 浅拷贝
}
void main() {
objmain();
}
对于等号也会有同样的问题
Name obj3("obj3");
obj3 = obj1; // 等号操作 浅拷贝 需要重载= 运行会报错
拷贝 需要重载=