我正在创建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
的方法吗?
答案 0 :(得分:0)
compUnit
的C ++对应物是一个指针。当compUnit
被Python垃圾回收时,它只是垃圾回收指针。它不会自动在指针上调用delete
。
您有几种选择,我能想到。
将对象包装到指针包装的Python中。当对象被垃圾回收时,其析构函数将被调用。添加必要的代码以删除包装器的析构函数中的C ++对象。
在swig接口文件中添加显式函数以删除对象。确保在Python对象范围结束之前在Python中调用该函数。