Основы глубокого клонирования
Глубокие функции клона копируют объект и его ссылки монопольного использования. Любые ссылки указателя игнорируются. Копируют функции клона wblock жесткие владельцы и жесткие указатели и игнорируют мягкие ссылки. В дополнение к копированию этой иерархии находящихся в собственности объектов, и глубокие функции клона и функции клона wblock также обрабатывают ссылки клонированного объекта, трансляция ссылок, чтобы указать на новые объекты в случае необходимости.
Чтобы инициализировать операцию имитации, используйте одну из следующих функций:
AcDbDatabase:: deepCloneObjects ()
AcDbDatabase:: wblock ()
AcDbDatabase:: insert()
AcDbDatabase:: deepCloneObjects () только поддерживает клонирование в пределах единственной{*отдельной*} базы данных. Если Вы должны клонировать объекты между базами данных, использовать или wblock (), вставьте (), или комбинация, и (типа wblock () к временной базе данных, и затем вставьте () что базу данных в существующую базу данных адресата).
При использовании AcDbDatabase:: вставка (), только вставляют к базам данных адресата, которые уже были сформированы. Вы можете получить полностью сформированный (и возможно полностью заполняемый) базу данных адресата, используя текущий рисунок, чтобы формировать новую базу данных с параметром конструктора Adesk:: kTrue или, создавая пустую новую базу данных, используя параметр конструктора Adesk:: kFalse и затем вызывая AcDbDatabase:: readDwgFile () на этом, чтобы заполнить это.
Вообще, чтобы использовать AcDbDatabase:: deepCloneObjects (), AcDbDatabase:: wblock (), или AcDbDatabase:: вставка () функции в вашем коде, Вы не должны знать того, как карта объекта ID заполнена или точно, что случается в течение каждой стадии глубокого клонирования. Если Вы создаете новый класс, и Вы хотите перегрузить AcDbObject:: deepClone () или AcDbObject:: wblockClone () функции, вы будете должны быть знакомыми с подробностями тех функций, которые описаны в “ Реализация deepClone () для Классов пользователя ” на странице 476.
AcDbObject:: deepClone () и AcDbObject:: wblockClone () функции не должен быть вызван{*назван*} непосредственно на заказном объекте в прикладном коде. Они только вызваны как часть цепочки от операции клонирования более высокого уровня.