c++,深拷贝构造函数与浅拷贝构造函数有什么不同
2个回答
展开全部
反对上面的答案。综合介绍下面三种情形:
赋值
将对象直接使用等号赋值,只是让等号的左值拥有右值的一个引用,相当于指针赋值一样。在这个过程中,没有新对象产生。
浅拷贝
浅拷贝已经和赋值有着本质区别了。浅拷贝会在内存中创建一个新的对象,并将被拷贝的对象的所有数据成员都复制到新的对象中。
深拷贝
拷贝相对于赋值,其目的是产生和原来一样的新的对象。但是,即便使用了浅拷贝也不一定是彻彻底底和原来的对象独立了。考虑下面的情景下:
对象a的某数据成员X,是对象b的引用
在这种情况下,假设我们使用浅拷贝对象a生成新对象aa,那么a.X和aa.X依然都是同一个b的引用。这是因为,浅拷贝只是给对象的所有数据成员进行了赋值操作,而对b的引用的赋值,正如上面所讲的,只是让新对象也拥有对b的引用,而没有继续拷贝对象b。
因此,深拷贝就是在这点上区分于浅拷贝的。当深拷贝在遇到引用数据成员时,不会只赋值引用,而是会拷贝一个新的。
所以,在上面的情景下:
使用浅拷贝时,a.X和aa.X是同一个b的引用
使用深拷贝时,a.X是b的引用,而aa.X是由“b复制来的bb”的引用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询