鱼C论坛

 找回密码
 立即注册
查看: 942|回复: 1

深拷贝于浅拷贝的问题

[复制链接]
发表于 2021-11-5 10:00:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下代码哪里出现了问题
编译出来提示const char to char

#include<iostream>
#include<string>

using namespace std;

class Person
{
    public:

    Person(int age ,char name)
    {
        m_age = age;
        m_name = new char(name);
        cout << "Person的构造函" << endl;
    }

//  Person(const Person& p)
//  {
    //  cout << "拷贝构造函数" << endl;
    //  m_age = p.m_age;
//      m_height = new int(*p.m_height);
//  }

    ~Person()
    {
        if(m_name != NULL)
        {
            delete m_name;
            m_name = NULL;
        }
        cout << "Person的析构函数" << endl;
    }

    int m_age;
    char *m_name;
};

void test1()
{
    Person p1(18 , "zy");
    cout << "年龄:" << p1.m_age << "名字:" << *p1.m_name <<  endl;
    Person p2(p1);
    cout << "年龄" << p2.m_age << "名字:" << *p2.m_name << endl;
}      

int main(int argc , char **argv)
{
    test1();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-5 11:58:56 | 显示全部楼层
#include <iostream>
#include <string>
#include <cstring>

using namespace std;

class Person {
  public:
    // Person(int age ,char name)
    Person(int age, const char *name) {
        m_age = age;
        // m_name = new char(name);
        m_name = new char[strlen(name) + 1];
        m_name[0] = '\0'; strcpy(m_name, name);
        cout << "Person的构造函" << endl;
    }

    //  Person(const Person& p)
    //  {
    //  cout << "拷贝构造函数" << endl;
    //  m_age = p.m_age;
    //      m_height = new int(*p.m_height);
    //  }
    Person(const Person &rhs) {
        m_age = rhs.m_age;
        m_name = new char[strlen(rhs.m_name) + 1];
        m_name[0] = '\0'; strcpy(m_name, rhs.m_name);
    }

    ~Person() {
        if(m_name != NULL) {
            //delete m_name;
            delete[] m_name;
            m_name = NULL;
        }
        cout << "Person的析构函数" << endl;
    }

    int m_age;
    char *m_name;
};

void test1() {
    Person p1(18, "zy");
    //cout << "年龄:" << p1.m_age << "名字:" << *p1.m_name << endl;
    cout << "年龄:" << p1.m_age << "名字:" << p1.m_name << endl;
    Person p2(p1);
    //cout << "年龄" << p2.m_age << "名字:" << *p2.m_name << endl;
    cout << "年龄" << p2.m_age << "名字:" << p2.m_name << endl;
}

int main(int argc, char **argv) {
    test1();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 21:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表