Что значит клонировать () объект? - PullRequest
8 голосов
/ 17 ноября 2009

Что такое клонирование объектов в vb6 или java? В какой ситуации мы используем клон? Что означает клонирование объектов? Кто-нибудь может рассказать мне пример, пожалуйста.

Ответы [ 2 ]

10 голосов
/ 17 ноября 2009

Клонирование фактически копирует данные объекта в новый объект.

Этот пример не клонирует данные:

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

Если Foo имеет член a, и вы изменили p.a, то o.a также изменится, поскольку и p, и o указывают на один и тот же объект.

Тем не менее,

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

В этом случае, если вы измените p.a, то o.a останется прежним, потому что они фактически указывают на отдельные объекты.

Существует два способа клонирования: неглубокий клон или глубокий клон.

Мелкий клон просто создает новый объект и копирует членов в новый объект. Это означает, что если один из членов фактически является указателем на другой объект, то этот объект будет разделен между старым объектом и новым объектом.

Глубокий клон фактически проходит и клонирует всех участников в новый объект. Таким образом, объекты являются полными копиями всех данных.

2 голосов
/ 17 ноября 2009

Обычно говорящие объекты передаются по ссылке. Поэтому, если вы скажете $objB=$objA, вы не получите новый объект; Вы получаете новое имя для того же объекта. Однако, если вы скажете $objB= clone $objA, вы получите копию $objA. В первом случае все, что вы делаете с $objB, также происходит с $objA. Во втором случае $objB является независимым.

...