深拷贝与浅拷贝这两类拷贝在计算机中是经常出现的,但还是有很多人不是很明白,下面将用比较白话来讲,估计都会明白。
深拷贝:就是指向的内存拷贝。 浅拷贝:就是指向的地址拷贝。
以上图为例:如果是深拷贝,拷贝的就是Data数据部份;如果是浅拷贝,拷贝的就是Add地址。
下面写段代码来说明深拷贝和浅拷贝:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
//梁笔记 //zouzhongliang.com #include <cstring> #include <iostream> using namespace std; int* Copy1(int* a, int len) { int* c = new int[len]; int t = sizeof(int)*len; //cout<<t<<endl; memcpy(c,a,t); return c; } int* Copy2(int* a) { return a; } int main() { int* a = new int[10]; int* b = Copy1(a,10); //深拷贝 int* c = Copy2(a); //浅拷贝 delete(a); delete(b); return 0; } |
下次如果再看到别人的代码,有深拷贝和浅拷贝自己在调用时一定要搞清楚,不然容易搞蒙掉。再用Opencv库时就有图像深拷贝与浅拷贝问题,希望能帮到大家。