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

浅拷贝和深拷贝

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-13 20:16
已编辑
厦门理工学院 软件测试
专业嗎喽:硕佬,把学校背景放后面几段,学校背景双非还学院,让人看了就不想往下看。 把实习经历和个人奖项放前面,用数字化简述自己实习的成果和掌握的技能,比如负责项目一次通过率90%,曾4次发现项目潜在问题风险为公司减少损失等等
点赞 评论 收藏
分享
求个付费实习岗位:这种就是吃满时代红利又没啥技术水平,只能靠压力学生彰显优越感的老登,别太在意了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务