C++学习笔记——深拷贝

//#include<iostream>
//using namespace std;
//
//class Stu
//{
//public:
//    int *a;
//    Stu()
//    {
//        a = new int[2];
//        a[0] = 13;
//        a[1] = 12;
//    }
//    Stu(const Stu& b)
//    {
//        //默认拷贝构造函数不会申请新的空间,直接与被构造函数共用同一个空间
//        //深拷贝,给拷贝的值申请空间,如果 指针成员不需要拷贝,使用默认拷贝构造函数就行了
//        this->a = new int[2];
//        this->a[0] = b.a[0];
//        this->a[1] = b.a[1];
//        //memcpy(this->a, b.a, 8);        //memcpy内存拷贝关键字,(目标空间,拷贝空间,字节数)
//    }
//    ~Stu()
//    {
//        delete[] a;
//    }
//};
//
//////传递引用
////Stu& fun(Stu& a) 
////{
////    return a;
////}
//// 传递指针
////Stu& fun(Stu* a)
////{
////    return *a;
////}
//
//int main()
//{
//    //浅拷贝的问题,在拷贝指针变量时,会重复释放空间,造成系统崩溃
//    Stu at;
//    cout << at.a[0] << " " << at.a[1] << endl;        //这里已经将指针a的空间释放了,此时定义的指针空间已经回归系统;
//    /*fun(&at);*/                                    //传递指针
//    Stu st;
//    cout << st.a[0] << " " << st.a[1] << endl;        //此时会再次释放指针的空间,但此时指针a的空间已经不存在了
//                                                    //所以此时会释放系统的空间,但是是非法的,所以程序崩溃了
//                                                    //解决空间二次释放空间造成奔溃的解决方法有深拷贝,传地址,传引用
//
//    return 0;
//}

 

posted @ 2022-12-01 16:08  努力的阿坤  阅读(29)  评论(0)    收藏  举报