如下:
int* first;
int second;
first = new int[5];
second = first;
此时,first和second指针指向同一个地址,都指向first所在的地址;
如果此时执行如下语句,
delete [] second;
那么first和second所指向的数组被删除(因为共用一个地址),
若再执行,
delete []first;
那么程序会因访问错误地址而终止,因为此时first所指向的地址无效了。
要避免这种情况,可以重新申请一个内存空间,如:
second = new [5];
此时first和second 分别指向不同的数组,任意一个数组被删除都不会影响另一个数组。
这就是浅层复制和深层复制的区别。