What does it mean to clone() an object?

妖精的绣舞 提交于 2019-12-09 10:29:09

问题


What is object cloning in vb6 or java? In what situation do we use a clone? What does cloning objects mean? Can any one tell me with example please.


回答1:


Cloning is actually copying the object data into a new object.

This example doesn't clone the data:

Foo p = new Foo();
Foo o = p;

If Foo has a member a and you change p.a then o.a also changes because both p and o point to the same object.

However,

Foo p = new Foo();
Foo o = p.Clone();

In this case if you change p.a then o.a remains the same because they actually point to separate objects.

There are actually two different ways you can clone: shallow clone or deep clone.

A shallow clone just makes a new object and copies the members into the new object. This means that if one of the members is actually a pointer to another object then that object will be shared between the old object and new object.

A deep clone actually goes through and clones all the members into the new object. That way the objects are complete copies of all the data.




回答2:


Generaly speaking objects are passed by reference. So if you say $objB=$objA you are not getting a new object; you are getting a new name for the same object. However, if you say $objB= clone $objA you get a copy of $objA. In the first case, whatever you do to $objB also happens to $objA. In the 2nd case, $objB is independent.



来源:https://stackoverflow.com/questions/1749581/what-does-it-mean-to-clone-an-object

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!