halcon/c++接口基础 之内存管理
所有的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,只需簡單調用使用這個過程化的變量作為參數的構造函數即可。
轉換句柄到句柄類
句柄不能直接通過構造函數轉換,但是,可以使用SetHandle()轉換。
- 轉換句柄類為句柄
相似地,一個句柄可以由對應的類通過GetHandle()獲得。你可以忽略這種方法,因此句柄類提供了強制轉換算子,可以自動將其轉換為句柄:
p_barcode=o_barcode;- 轉換圖形化參數類為Hobject
圖形化參數可以從像HRegion這樣的類轉換成Hobject,只需調用方法Id()。
- 轉換HWindow為一個窗口句柄
與其他句柄不同,面向過程的窗口句柄不能轉換為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++接口基础 之内存管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt的下载安装全教程
- 下一篇: 【软件开发底层知识修炼】十二 C/C+