2者主要区别:是否为成员变量分配新内存空间
复制构造函数有2种:深复制与浅复制
当将一个对象A复制给另一个对象B时,系统会调用复制构造函数
编译器默认的复制构造函数是浅拷贝,它将原对象的每一个成员变量复制到新对象的成员变量中去。因而最后两个对象的变量均指向相同的数据成员的内存地址。
当数据成员中没有指针时,浅拷贝是可行的。
但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址M,当程序中删除一个对象A时,析构函数会释放掉指针变量所指向的那块内存空间M,而对象B的指针变量仍然指向该空间M,而此时该空间已不存在,因而导致指针悬挂现象。
所以,这时,必须采用深拷贝,创建自己的复制构造函数。 我们自己来为我们的成员变量分配新内存,这样一个对象在析构后只是删除自己相关的内存空间,而不会影响到另一个对象。
深拷贝与浅拷贝的区别就在于深拷贝会在堆内存中另外申请空间来储存数据,从而也就解决了指针悬挂的问题。
简而言之,当数据成员中有指针时,必须要用深拷贝。
分享到:
相关推荐
java的深复制与浅复制,讲述了深复制和浅复制的区别
Java深复制与浅复制
NULL 博文链接:https://zzqrj.iteye.com/blog/572562
c#的代码写的深复制,浅复制区别,用一段小代码说明他们之间的区别,虽然不是很详尽,但是希望对大家有帮助
主要介绍了 Java对象深复制与浅复制实例详解的相关资料,需要的朋友可以参考下
android 浅复制和深复制-Java Generic Deep Copy 篇
iOS 深复制 浅复制,nsarray默认浅复制,copyItem设为yes,也只是一层深复制,完全深复制用序列化。
Java关于深拷贝(深复制)和浅拷贝(浅复制)比较通俗易懂的简单说明及示例代码...
android 浅复制和深复制实例
1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
}3.、控制台,可以看到了改了复制出来的,也不会改变之前的4、浅复制 对象中引入对象,观察浅复制和深复制的区别理解:1、浅复制中加入对象,测试观察引出深复制2、
Java中对象的深复制和浅复制详解.doc
java深复制浅复制的实现附源代码,并实现java类之间的多对多联系。
我想实现了深度复制呢,也就是我新复制出来的对象不是仅仅复制引用, 而是复制对象!比如说,你需要在一个模板的基础上修改出5个版本的建立,每个版本投递到不同的企业上,版本1投给公司A,版本2投给公司B,。。。...
主要帮助大家理解java中的深复制和浅复制,对java中的深复制和浅复制进行剖析,感兴趣的小伙伴们可以参考一下
浅拷贝(浅复制、浅克隆)、深拷贝(深复制、深克隆)实战工程,IDEA搭建
5.2.0 浅复制和深复制?怎样实现深复制?
用C++写的代码,基于VS2008平台写的,可以转换到VC6下,主要拿Prototype.h和Prototype.cpp以及main.cpp修改即可,目的是写来测试浅复制和深复制的区别的。
主要介绍了Java中的深拷贝(深复制)和浅拷贝(浅复制)介绍,需要的朋友可以参考下
教你javascript克隆dom,浅复制dom,深复制dom