[英]C++ destructor not being called in a swig interface file
我正在創建 C++ 和 python 代碼之間的接口。
我在 swig 接口文件中創建了一個名為composition_api
的模塊。 它具有我導入到 python 模塊中的方法,如下所示。
/// SWIG Interface File.
%module composition_api
%{
#include <include/mcm/compiler/compilation_unit.hpp>
mv::CompilationUnit* getCompilationUnit(bool disableHardware)
{
auto unit = new mv::CompilationUnit("pySwigCU");
return unit;
}
}
我將它作為庫導入到 python 腳本中。
Python腳本
import composition_api as ca
compUnit = ca.getCompilationUnit(not enableHardware)
當 python 腳本運行完畢后,C++ 源代碼中不會調用CompilationUnit
析構函數。 我是否必須在接口文件中創建一個調用delete unit
?
compUnit
的 C++ 對應物是一個指針。 當compUnit
被 Python 垃圾收集時,它只是簡單地垃圾收集指針。 它不會自動調用指針上的delete
。
你有幾個我能想到的選擇。
將一個對象返回給 Python,該對象是指針的包裝器。 當對象被垃圾回收時,它的析構函數將被調用。 在包裝器的析構函數中添加必要的代碼以刪除 C++ 對象。
在 swig 接口文件中添加顯式函數刪除對象。 確保在 Python 對象的范圍結束之前在 Python 中調用該函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.