题解 | #浅拷贝和深拷贝#

浅拷贝和深拷贝

https://www.nowcoder.com/practice/535753110cbd4e8987adc2e67f392ab7

#include <iostream>
#include <cstring>
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) { //拷贝构造函数
        this->name = new char[strlen(p.name) + 1]; //设置name字符数组的长度
        strcpy(this->name, p.name); //拷贝name数组
        this->age = p.age;
    }
    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;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
投递大华股份等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务