深拷贝与浅拷贝
来源:互联网 发布:淘宝上的手办是真假 编辑:程序博客网 时间:2024/06/06 22:47
通俗来说
深拷贝是源对象与拷贝对象相互独,任何一个对象的更改都不会影响另外的对象..
浅拷贝是源对象与拷贝对象拥有同一个实体,仅仅是名称不同,其中任何一个更改都会影响对方
一,常见的深拷贝
我们就平常用的简单的复制操作即为深拷贝,例如
int a = 2;int b = a;b = 1;上述即为深拷贝,改变b的值并不影响a的值
类似的还有结构体的对象之间的赋值
例如
struct Point { public int X; public int Y; public Point(int x, int y) { X = x; Y = y; } } Point source = new Point(10, 20); Point dest = source; dest.X = 20
二,浅拷贝
对于类来说, 同一个类的不同对象之间的赋值时浅拷贝,如下
class Point { public int X; public int Y; public Point(int x, int y) { X = x; Y = y; } } Point source = new Point(10, 20); Point dest = source; dest.X = 20;dest.X = 20 执行的是浅拷贝,此时 source.X = 20
由于引用对象的赋值仅仅是复制变量指向的地址,因此要对引用对象进行深拷贝就要重新创建一份该对象的实例,并对该对象的字段进行逐一赋值,如以下写法
class Point { public int X; public int Y; public Point(int x, int y) { X = x; Y = y; } } Point source = new Point(10, 20); Point dest = new Point(source.X, source.Y); //或以下写法 //Point dest = new Point() //dest.X = source.X //dest.Y = source.Y
赋值与复制的区别
对象的赋值是对一个已经存在的对象赋值,因此必须先定义被赋值的对象,才能进行复制。
对象的复制是从无到有建立一个新对象,并使它与一个已有的对象完全相同(包括对象的结构和成员的值)
//赋值//对象1和对象2属于同一个类对象1 = 对象2//复制//对象2是已存在的对象类 对象1( 对象2)//两外一种复制形式类 对象1 = 对象2
参考博客
http://www.cnblogs.com/phoenix-rock/archive/2006/11/07/shallowcopy_deepcopy.html
http://blog.csdn.net/qsyzb/article/details/11267739
0 0
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- ZOJ 3822 Domination
- free()与release区别
- 一个MVC4 下的验证码用法
- 2014年工作中遇到的20个问题:21-40
- android工程中各种文件介绍
- 深拷贝与浅拷贝
- Largest Rectangle in Histogram
- 使用curl库进行http通信
- KaLi Linux更改系统界面及语言
- 中文乱码的解决办法
- 创业有败局:创业者必须面对的六种现实
- 进程的内存分配函数之brk和mmap(不考虑共享内存)的应用
- POJ 2186 Popular Cows (强联通)
- Creating a 2D Active Shape Model in ITK Using PCA