题解 | #浅拷贝和深拷贝#
浅拷贝和深拷贝
https://www.nowcoder.com/practice/535753110cbd4e8987adc2e67f392ab7
#include <iostream>
#include <cstring>
#pragma warning(disable : 4996)
using namespace std;
class Person {
public:
char* name; // 姓名
int age; // 年龄
Person(const char* name, int age) {
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);
this->age = age;
}
// write your code here......
Person(const Person &p):age(p.age){//拷贝构造必须传引用,深拷贝字符串要用下面的方式
this->name=new char[strlen(name)+1];//利用new开辟一个动态空间,用name指针接收
//注意复制相等空间后要+1,这里的+1是给字符串末尾的“\0”留出空间
strcpy(this->name,p.name);//函数传参
}
void showPerson() {
cout << name << " " << age << endl;
}
~Person() {
if (name != nullptr) {
delete[] name;//数组类型释放内存在指针前加[]
name = nullptr;//指针置空
}
}
};
int main() {
char name[100] = { 0 };
int age;
cin >> name;
cin >> age;
Person p1(name, age);
Person p2 = p1;
p2.showPerson();
return 0;
}

