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; //}