18、深拷贝与浅拷贝的区别【中高频】
- 互联网
- 2025-09-19 06:06:01

浅拷贝
浅拷贝只是拷贝了一个指针,并没有开辟一块新的内存。拷贝的指针和原来的指针 指向同一块地址。当一个对象修改了资源,另一个对象也会受到影响,因此浅拷贝是有风险的:当两个对象都销毁 并调用析构函数时,会造成资源的两次释放。
深拷贝
深拷贝不仅拷贝原对象的值,而且还开辟一块新的内存来存放拷贝来的值。深拷贝的两个对象是相互独立的,互不影响。另外,C++11引入了移动语义,可以减少不必要的深拷贝。
#include <iostream> #include <string.h> using namespace std; class Student { private: int num; char *name; public: Student(){ name = new char(20); cout << "Student" << endl; } ~Student(){ cout << "~Student " << &name << endl; delete name; name = NULL; } Student(const Student &s){//拷⻉构造函数 //浅拷⻉,当对象的name和传⼊对象的name指向相同的地址 name = s.name; //深拷⻉(下面两个函数缺一不可) //name = new char(20);//自己申请一块内存 //memcpy(name, s.name, strlen(s.name));//将s.name中的数据全部拷贝过来 cout << "copy Student" << endl; } }; int main(){ {// 花括号让s1和s2变成局部对象,⽅便测试 Student s1; Student s2(s1);// 复制对象 } system("pause"); return 0; } //浅拷⻉执⾏结果: //Student //copy Student //~Student 0x7fffed0c3ec0 //~Student 0x7fffed0c3ed0 //*** Error in `/tmp/815453382/a.out': double free or corruption (fasttop): 0x0000000001c82c20 *** //深拷⻉执⾏结果: //Student //copy Student //~Student 0x7fffebca9fb0 //~Student 0x7fffebca9fc018、深拷贝与浅拷贝的区别【中高频】由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“18、深拷贝与浅拷贝的区别【中高频】”