对深复制和浅复制不是很明白,请给位指点一下(100分)

  • 主题发起人 主题发起人 netspur
  • 开始时间 开始时间
深复制是指把对象本身复制了一份。相当于传值。可以用assign函数实现对象的深复制
浅复制只是复制了对象的引用,相当于传址。使用对象一般就是浅复制
不过我觉得这个问题在Delphi中不大。 因为对象只有一种模型(即引用模型)
 
浅复制与深复制的区别就是:如果一个对象含有对其他对象的引用,那么经过复制(克隆)
后,除了生成的新对象中的所有变量含有与原对象的变量的相同值
浅复制其包含的引用与原对象的引用也指向同一个对象,也就是说,浅复制仅仅复制所考
虑的对象,而不复制它所引用的对象;
深复制把要复制的对象所引用的对象都复制了一遍,那么其包含对其他对象的引用是指向
复制后的新对象.
 
----引用《Java与模式》
模式的实现:深复制和浅复制
正如前面所说的,复制或克隆有两种方式。这两种方式分别叫做浅复制(浅克隆)和深复制(深克隆)。
浅复制(浅克隆)
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其它对象的引用都仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制(深克隆)
被复制对象的所有的变量都含有与原来的对象相同的值,除去那些引用其它对象的变量。那些引用其它对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍;而这种对被引用到的对象的复制叫做间接复制。
深复制要深入到多少层,是一个不易确定的问题。在决定以深复制的方式复制一个对象的时候,必须决定对间接复制的对象是采取浅复制还是继续采用深复制。因此在采取深复制时,需要决定多深才算深。此外,在深复制的过程中,很可能会出现循环引用的问题,必须小心处理。
 
请问如何理解以下两句话:
浅比较相等并不意味着引用比较一定相等;但引用比较相等则浅比较一定相等
深比较相等并不意味着浅比较一定相等;但浅比较相等则深比较一定相等
 
多人接受答案了。
 
后退
顶部