arx cloneSameOwnerObjects

本文讨论了AcRxObject::clone()和AcDbObject::deepClone()的区别,重点介绍了深克隆的概念,包括克隆和存档、克隆和所有权、克隆和ID映射以及克隆和转换的过程。深克隆处理硬所有权和软所有权连接,通过ID映射追踪克隆对象,用于复制对象及其所有权关系,如在复制动态块参照时。
摘要由CSDN通过智能技术生成

cloneSameOwnerObjects

2.2 clone() 和deepClone()

AcRxObject::clone() 函数仅仅克隆单一实体。AcDbObject::deepClone() 函数克隆该对象以及该对象拥有的其他对象。AcDbObject::deepClone()还会转换被克隆对象的引用关系。通常,deepClone函数更加安全。

2.3 关键概念

2.3.1 克隆和存档

深度克隆和wblock克隆操作都使用对象存档来复制(克隆)对象。创建一个新对象(即克隆对象)后,使用dwgOut()将原始对象存档到内存中。最后,使用dwgIn()将数据存到到到新的克隆对象中。

2.3.2 克隆和所有权

对象关系作为一个AcDbObjectId成员变量存在对象当中。在对象中存在四种不同关系类型——硬拥有者、软拥有者、硬指针、软指针。比如,如果你创建了一个需要文本样式的实体,这个实体对象应当会有一个AcDbObjectId类型的数据成员,指向某个AcDbTextStyleTableRecord对象;它应当会被作为硬指针被存档。这个AcDbObjectId成员被存档的方式决定了deepClone和wblock使用它的方式。
深克隆处理所有硬所有权和软所有权连接;wblock写块操作处理所有硬所有权和硬指针连接。

2.3.3 克隆和ID映射

ID映射是追踪克隆操作的一种机制。映射包含对象的ID对——源对象的ID(被称作"Key ID")和克隆对象或者目标对象ID(被称为"value ID")。ID映射也包含额外的ID对,在ID转换时需要这些

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lst0426

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值