首页 > 其他 > 详细

拷贝构造函数的深拷贝和浅拷贝

时间:2020-09-24 23:17:30      阅读:111      评论:0      收藏:0      [点我收藏+]

如果类中的某个属性是指针,且该指针指向的是一个堆

当创建一个新的类,而且拷贝构造函数默认时或者是直接的赋值,那两个类的该属性就指向同一个地址,当在析构函数中加入删除堆的操作时,会报错

#include<iostream>
#include<string>
using namespace std;
class Student
{
private:
    int age;
    int *height;
public:
    Student(const Student &a){
        age = a.age;
        height = a.height; //这里就是一个简单的浅复制
    }
    Student(int age1, int height1){
        age = age1;
        height = new int(height1);
    }
    void printAge(){
        cout<<*height<<endl;
    }
    ~Student(){
        delete height;
        height = NULL;
        cout<<"我是析构函数"<<endl;
    }
};
int main(){
    system("chcp 65001");
    Student stu1(12, 135);
    Student stu2(stu1);
    stu2.printAge();
    system("pause");
    return 0;
}

解决方法就是在拷贝函数时,让height的指向开一个新的堆来保存

拷贝构造函数的深拷贝和浅拷贝

原文:https://www.cnblogs.com/leishenwudi/p/13727061.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!