所有的HALCON类,不仅仅HImage,HRegion,HTuple,HFramegrabber等等,还有面向过程的方法中使用的Hobject,都可以使用默认的析构器自动释放内存。
( see also section 2.4 “Destructors and Halcon Operators”))进一步地,当再一次构造对象,比如通过已经初始化的实例(see section “Constructors and Halcon Operators)调用CreateBarCodeModel,则已经分配好的内存将自动释放掉,然后再次重新分配。这样,在HALCON/C++中就没有必要调用clear_obj。另外,如果你的确调用了它,HALCON会抱怨已经释放了内存。

然而,仍然有两种场合需要显式地管理内存:第一种,见2.1节,string类型的输出参数,你必须为他们显式地分配内存。

第二种是当在面向过程的方法中调用句柄时:当创建一个句柄,如使用open_framegrabber内存分配,必须要在程序的末尾通过对应的算子释放内存,如close_framegrabber.

如何结合面向对象和面向过程的代码

正如前面说明的那样,我们推荐尽可能地使用面向对象的编程方法。然而,由于某些原因我们使用了面向过程的方法。比如,如果你想快速整合从HDevelop导出的代码,此种情况下,你只能通过面向过程的方法。除此之外,当前情况下,某些算子仅仅提供面向过程的方法,如创建仿射变换算子像vector_to_ragid。

图像化的参数和句柄可以通过如下方式转换:

  • 将Hobject转换为图形化的参数类

    Hobject        p_image;
    read_image(&p_image, "barcode/ean13/ean1301");HImage         o_image(p_image);

    图形化的参数可以从Hobject转换成比如HImage,只需简单调用使用这个过程化的变量作为参数的构造函数即可。

  • 转换句柄到句柄类

HTuple         p_barcode;create_bar_code_model(HTuple(), HTuple(), &p_barcode);HBarCode       o_barcode;o_barcode.SetHandle(p_barcode[0]);o_code_region = o_barcode.FindBarCode(o_image, "EAN-13", &result);

句柄不能直接通过构造函数转换,但是,可以使用SetHandle()转换。

  • 转换句柄类为句柄
p_barcode = o_barcode.GetHandle();

相似地,一个句柄可以由对应的类通过GetHandle()获得。你可以忽略这种方法,因此句柄类提供了强制转换算子,可以自动将其转换为句柄:

p_barcode=o_barcode;
  • 转换图形化参数类为Hobject
Hobject  p_code_region = o_code_region.Id();

图形化参数可以从像HRegion这样的类转换成Hobject,只需调用方法Id()。

  • 转换HWindow为一个窗口句柄
long           p_window;open_window(0, 0, width/2, height/2, 0, "visible", "", &p_window);HWindow        o_window(0, 0, 100, 100, 0, "visible", "");p_window = o_window.WindowHandle();disp_obj(p_code_region, p_window);  

与其他句柄不同,面向过程的窗口句柄不能转换为HWindow类的对象!然而,你可以从HWindow通过WindowHandle()提取句柄。

正如章节“析构器和Halcon算子”中所说,你不能将clear_shape_model,clear_all_shape_models,or close_framegrabber和对应的句柄类一起使用。

I/O Streams

自从HALCON 7.1开始,halcon/c++不再提供输入输出流算子,因为一些项目想要使用旧的输入输出流(即他们想要使用

#include "HalconCpp.h"
using namespace Halcon;
#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif

halcon/c++接口基础 之内存管理相关推荐

  1. halcon/c++接口基础 之 halcon初认识

    从今天开始,开始更新博客,主要分享自己最近正在翻译的Halcon/C++教程.先给出第一篇文章,由于此文章,是用latex写的,直接导成html,保存在七牛云存储上,所以直接点击链接就看到,后面我将直 ...

  2. LevelDB 源码剖析(三)公共基础:内存管理、数值编码、Env家族、文件操作

    文章目录 内存管理 Arena 结构 内存分配 内存使用率统计 TCMalloc Env家族 PosixEnv EnvWrapper InMemoryEnv 文件操作 SequentialFile W ...

  3. halcon/c++接口基础 之 控制参数

    HALCON/C++可以处理各种不同类型的字母数字混合的控制参数,如下: 离散数字(long) 浮点数字(double) 字符串(char*) 控制参数的一个特殊形式是句柄,提供了途径去访问复杂的数据 ...

  4. Boost学习笔记(一)——Boost使用基础、内存管理

    一.Boost使用基础 Boost库的大部分组件(90%左右),不需要进行编译,直接包含头文件即可使用. #include <boost/logic/tribool.hpp> using ...

  5. Objective-C基础3:内存管理续

    1.上篇我们讲了OC中的内存管理基础,我们再总结一下何时该用内存管理. 1)当用new.alloc.copy创建对象时,必须要释放对象. 2)当拥有对象时,如果是临时对象,不需要释放:当需要长时间保留 ...

  6. java与c内存管理_Java基础--Java内存管理与垃圾回收

    Java自动内存管理 在讲解内存管理之前,首先需要了解对象和对象引用的区别 对象是类的一个实例,以人这个类为例,Person是我们定义的一个类 public class Person{} public ...

  7. python内存池机制,python基础—12python内存管理机制

    一.内存池机制 1.对象池 面试题目: python内存管理机制是什么? 1). 由于python中万物皆对象,内存管理机制就是对象的存储问题,Python会分 配一块内存空间去存储对象. 2) 对于 ...

  8. C语言基础分享——内存管理3

    嗨喽,我是春哥,今天主要介绍段错误以及调试方法,经常遇到段错误,对C语言的理解才会更深. 个人建议收藏此文,这应该是介绍调试方法比较全面的了. 先介绍一下什么是段错误,段错误就意味着你访问了错误的内存 ...

  9. bada开发基础之内存管理

    1.两阶段构造 为了防止内存泄露,bada在构造对象时使用了两阶段构造,个人觉得bada的内存管理很大程度上借鉴了symbian.先让我们来看看bada文档上这段代码: class SimpleCla ...

最新文章

  1. vm linux连接互联网,通过wifi将Hyper-V VM(基于Linux)连接到互联网 - Linux中似乎没有连接到wifi...
  2. Redis在PHP项目中的应用
  3. [html] input上传文件可以同时选择多张吗?怎么设置?
  4. 人山人海人立方 http://renlifang.msra.cn
  5. 即时通讯 我穿上球鞋
  6. SAP License:如何用Coding Block
  7. python3 文件处理
  8. Home vs2013
  9. 决策树算法小结(三) CART原理及代码实现
  10. 计算机关机后耗电问题,笔记本电脑关机后电池还会耗电怎么解决
  11. 祝贺泰山OFFICE CDKEY长度25,吾已成为顶级CDKEY砖家
  12. USB3.0 HUB方案之VL817-Q7
  13. “似乎不能再叫闵大荒了。”
  14. const char *p与char * const p区别
  15. 母亲节板报图片计算机方案,母亲节电子手抄报图片大全
  16. 哲理小故事300篇(1—100)
  17. 梅西:世界杯是我最重要的奖杯;很高兴斯卡洛尼能够续约
  18. 使用 GPG 为极狐GitLab git commit 签名
  19. java代码生成_Java代码生成器CodeX4J介绍
  20. 郑州大学“战疫杯”大学生程序设计在线邀请赛(1)(C++题解+详细思路)2022年5月9日

热门文章

  1. React基础学习(第三天)
  2. Vue — 第三天(计算属性和json-server)
  3. javaScript第三天(1)
  4. 洛谷P2822组合数问题
  5. Echarts实现隐藏x轴,y轴,刻度线,网格
  6. [Luogu1821][USACO07FEB]银牛派对Silver Cow Party
  7. 要回家了,想到以后..
  8. 看完这篇文章保你面试稳操胜券——React篇
  9. webpack --- html-webpack-plugin
  10. es6 --- Promise.catch