我正在创建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脚本
^{pr2}$当Python脚本运行完毕时,在C++源代码中没有调用^ {< CD2>}析构函数。我必须在接口文件中创建一个调用delete unit
的方法吗?在
compUnit
被Python垃圾回收时,它只是垃圾收集指针。它不会自动调用指针上的delete
。在你有几个我能想到的选择。在
向Python返回一个对象,该对象是指针的包装器。当对象被垃圾回收时,将调用其析构函数。添加必要的代码来删除包装器析构函数中的C++对象。
在swig接口文件中添加一个显式函数来删除对象。确保在Python对象的范围结束之前调用Python中的函数。
相关问题 更多 >
编程相关推荐