深拷贝与浅拷贝(Deep Copy and Shallow Copy)
2012-05-25 14:24
447 查看
什么叫深拷贝与浅拷贝(Deep Copy and Shallow Copy)
a.浅拷贝(Shallow Copy影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用。
b.深拷贝(Deep Copy 深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.完全产生新对象。
我们知道,在C++中有拷贝构造函数和拷贝赋值函数的概念。浅拷贝就是成员数据之间的一一赋值:把值赋给一一赋给要拷贝的值。但是可能会有这样的情况:对象还包含资源,这里的资源可以指堆资源,或者一个文件。当值拷贝的时候,两个对象就有用共同的资源,同时对资源可以访问,这样就会出问题。深拷贝就是用来解决这样的问题的,它把资源也赋值一次,使对象拥有不同的资源,但资源的内容是一样的。对于堆资源来说,就是在开辟一片堆内存,把原来的内容拷贝。
如果你拷贝的对象中引用了某个外部的内容(比如分配在堆上的数据),那么在拷贝这个对象的时候,让新旧两个对象指向同一个外部的内容,就是浅拷贝;如果在拷贝这个对象的时候为新对象制作了外部对象的独立拷贝,就是深拷贝
a.浅拷贝(Shallow Copy影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用。
b.深拷贝(Deep Copy 深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.完全产生新对象。
我们知道,在C++中有拷贝构造函数和拷贝赋值函数的概念。浅拷贝就是成员数据之间的一一赋值:把值赋给一一赋给要拷贝的值。但是可能会有这样的情况:对象还包含资源,这里的资源可以指堆资源,或者一个文件。当值拷贝的时候,两个对象就有用共同的资源,同时对资源可以访问,这样就会出问题。深拷贝就是用来解决这样的问题的,它把资源也赋值一次,使对象拥有不同的资源,但资源的内容是一样的。对于堆资源来说,就是在开辟一片堆内存,把原来的内容拷贝。
如果你拷贝的对象中引用了某个外部的内容(比如分配在堆上的数据),那么在拷贝这个对象的时候,让新旧两个对象指向同一个外部的内容,就是浅拷贝;如果在拷贝这个对象的时候为新对象制作了外部对象的独立拷贝,就是深拷贝
相关文章推荐
- [导入].NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- 【转】.NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- .NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- .NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)(转载)
- 深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解(shallow copy and deep copy)
- 深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- shallow copy and deep copy (浅拷贝 vs 深拷贝)
- .NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy) 推荐
- .NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- shallow copy and deep copy in Prototype Pattern
- deep copy And shallow corp
- shallow copy and deep copy
- Python: Shallow and deep copy operations
- 浅拷贝和深拷贝深入理解(shallow copy VS deep copy)
- IOS 深拷贝和浅拷贝问题 (deep copy and shadow copy)
- copy — Shallow and deep copy operations
- Python Shallow Copy VS. Deep Copy (Python浅拷贝和深拷贝)