有关深拷贝和浅拷贝的问题,对于非指针类型而言,有影响吗

有关深拷贝和浅拷贝的问题,对于非指针类型而言,有影响吗

#include
using namespace std;
#include
class student
{
public:
    student()         //主动写的默认构造函数
    {
        m_name = "阿伟";
        m_age = 18;
    }
    student(string name, int age)//含参构造函数
    {
        m_name = name;
        m_age = age;
    }
    void change()
    {
        m_name = "asdfasdf";
        m_age = 345;
    }
    void display()
    {
        cout << "name:" << m_name << endl;
        cout << "age:" << m_age << endl;
    }
    //student(const student& stu);    //复制构造函数
private:
    string m_name;
    int m_age;


};

/*student::student(const student& stu)
{
    m_name = stu.m_name;
    m_age = stu.m_age;
    cout << "这里是复制构造函数" << endl;
}*/

int main()
{
    student a("阿斌", 23);
    student b = a;
    //cout << "这是赋值之前的b" << endl;
    //b.display();
    student c;
    c = a;
    cout << "使用了自带的赋值运算符"<"c的值为"<display();
    //这里用的不是复制构造函数,而是C++自动重载好的赋值运算符
    cout << "初始化后的b" << endl;
    b.display();
    b.change();
    cout << "b的值改变之后"<display();
    cout << "此时a的值" << endl;
    a.display();
    c.change();
    cout << "c的值改变之后" << endl;
    c.display();
    cout << "此时a的值" << endl;
    a.display();
    return 0;



}

运行的结果是改变b和c的值,a的值都没有改变

那么,是C++自带的重载赋值运算符和复制构造函数都是浅拷贝,还是因为,深浅拷贝只对于指针而言有区别?

确实和指针类型有较大关系,只是复制指针就是浅拷贝。浅拷贝后两个对象还有共享信息。深拷贝是所有内容完全复制,使两个对象毫无关系。
当类对象中的成员变量均支持=操作符时,两个对象就可以直接赋值。代码中 c = a;实际是将a的成员赋值给b的成员,string类型的=操作时深拷贝。如果类中有指针变量,那么默认只是进行指针的赋值,使得两个指针指向同一块内存。除非你给这个类重载=操作符,然后为当前类开辟新的内存空间,实现指针指向空间数据的复制,这样用=操作符就变为深拷贝了。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632