c++一般指针的深层复制和浅层复制(1)
2011-09-10 12:54
232 查看
如下:
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 分别指向不同的数组,任意一个数组被删除都不会影响另一个数组。
这就是浅层复制和深层复制的区别。
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 分别指向不同的数组,任意一个数组被删除都不会影响另一个数组。
这就是浅层复制和深层复制的区别。
相关文章推荐
- C++深层复制解决指针悬挂
- 【C++】指向指针的指针int**的深复制的实现
- C/C++语言void及void指针深层探索
- c++深层复制
- C\C++中void及void指针深层探索
- C/C++语言void及void指针深层探索
- C/C++数组名与指针区别深层探索
- C++智能指针,实现Mat类的复制控制
- C/C++语言void及void指针深层探索
- C/C++语言void及void指针深层探索
- C/C++数组名与指针区别深层探索
- C/C++数组名与指针区别深层探索
- C/C++语言void及void指针深层探索
- C/C++语言void及void指针深层探索
- C/C++语言void及void指针深层探索
- C/C++语言void及void指针深层探索
- 笔试常考--C/C++语言void及void指针深层探索
- C/C++数组名与指针区别深层探索
- C/C++语言void及void指针深层探索