Клонирование (программирование)
Эта статья нуждается в дополнительных цитатах для проверки . ( август 2015 г. ) |
В информатике ( клонирование означает создание точной копии объекта , часто в рамках парадигмы программирования на основе экземпляров или объектно-ориентированного программирования ООП).
Мелкие копии
[ редактировать ]В большинстве языков программирования (исключением является Ruby ) примитивные типы , такие как double
, float
, int
, long
и т. д. просто сохраняют свои значения где-нибудь в памяти компьютера (часто в стеке вызовов ). Используя простое присваивание, вы можете скопировать содержимое переменной в другую:
Копирование примитивных типов в Java или C++ :
int original = 42;
int copy = 0;
copy = original;
Многие языки ООП-программирования (включая Java , D , ECMAScript и C# ) используют ссылки на объекты. Ссылки на объекты, похожие на указатели в других языках, позволяют передавать объекты по адресу, поэтому не нужно копировать весь объект.
Пример Java при «копировании» объекта с использованием простого присваивания:
Object original = new Object();
Object copy = null;
copy = original; // does not copy object but only its reference
Объект не дублируется, переменные «оригинал» и «копия» фактически относятся к одному и тому же объекту. В C++ эквивалентный код
Object* original = new Object();
Object* copy = NULL;
copy = original;
дает понять, что это указатель на копируемый объект, а не сам объект.
Клонирование
[ редактировать ]Процесс фактического создания еще одной точной копии объекта вместо его ссылки называется клонированием. В большинстве языков язык или библиотеки могут облегчить своего рода клонирование. На Яве Object
класс содержит clone()
метод , который копирует объект и возвращает ссылку на этот скопированный объект. Поскольку оно находится в Object
class, все классы, определенные в Java, будут иметь метод клонирования, доступный программисту (хотя для правильной работы его необходимо переопределять на каждом уровне использования).
Клонирование объекта в Java:
Object originalObj = new Object();
Object copyObj = null;
copyObj = originalObj.clone(); // duplicates the object and assigns the new reference to 'copyObj'
→
Объекты C++ в целом ведут себя как примитивные типы, поэтому для копирования объекта C++ можно использовать оператор ' =
' (присваивание) оператор. Для всех классов предусмотрен оператор присваивания по умолчанию, но его эффект можно изменить с помощью перегрузки операторов . При использовании этой техники существуют опасности (см. нарезка ). Методом предотвращения нарезки может быть реализация решения, аналогичного Java. clone()
метод для классов и использование указателей. (нет встроенного clone()
метод.)
Пример клонирования объекта на C++:
Object originalObj;
Object copyObj(originalObj); // creates a copy of originalObj named copyObj
Пример C++ клонирования объектов с использованием указателей (чтобы избежать нарезки, см. [1] ):
Object* originalObj = new Object;
Object* copyObj = nullptr;
copyObj = new Object(*originalObj); // creates a copy of originalObj and assigns its address to copyObj
Ссылки
[ редактировать ]- ^ См. вопросы и ответы на сайте en.allexperts.com. Архивировано 18 июля 2009 г. на Wayback Machine.