设置首页收藏本站
开启左侧

HObject 用等号赋值和 copy_obj的区别

[复制链接]
xuzi_fan 发表于 2018-9-7 13:39:53 | 显示全部楼层 |阅读模式
请问这两者之间的区别是什么?
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
绝地武士 发表于 2018-9-7 14:04:10 | 显示全部楼层
一个是引用指向的还是原来的图像,一个是产生新的图像(克隆原图片数据)!
这个和C#里面的引用类型是一模一样的!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| xuzi_fan 发表于 2018-9-7 14:20:55 | 显示全部楼层
绝地武士 发表于 2018-9-7 14:04
一个是引用指向的还是原来的图像,一个是产生新的图像(克隆原图片数据)!
这个和C#里面的引用类型是一模 ...

      我之前也是这么考虑的。因为实际用的过程中,copy_obj 耗费的时间要十几毫秒,但是等号赋值,就只有0毫秒。所以我猜等号赋值应该只是重新指向前的对像的地址。但是一直没有找到资料佐证,所以一直不敢确认。感谢大神的回复。{:1_313:}
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
绝地武士 发表于 2018-9-7 14:32:13 | 显示全部楼层
xuzi_fan 发表于 2018-9-7 14:20
我之前也是这么考虑的。因为实际用的过程中,copy_obj 耗费的时间要十几毫秒,但是等号赋值,就只 ...

是的,反正你记住除了值类型的数据可以直接存栈里面以外,其他的数据类型只能存堆里,而且是动态开辟的,存对象的地址即可,而Halcon的HTuple和Hobject都是Halcon重新封装的存堆里,所以都是引用类型!
  1. HTuple初始化是new HTuple()
  2. HObject初始化是gen_empty_obj()
复制代码
很明显gen_empty_obj内部做了new处理!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Shamar 发表于 2021-3-16 17:42:04 | 显示全部楼层
我测了一下 赋值是深拷贝吧 老铁
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
绝地武士 发表于 2021-12-3 22:56:23 | 显示全部楼层
Shamar 发表于 2021-3-16 17:42
**** 作者被禁止或删除 内容自动屏蔽 ****

你见过哪种语言赋值是直接深拷贝的?而且深拷贝适合的对象是引用类型而非值类型。一般深拷贝都发生在方法内部,比如引用类型的构造函数或者Halcon里面的copy_obj方法。
正常情况下引用类型赋值都是引用地址,数据为同一地址,所以源数据丢失全部对象都丢失。而深拷贝的目的是在内存重新再完整的拷贝一份对象数据,这就是引用类型对象完全复制的真正意义。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表