在SWIG接口FI中不调用C++析构函数

2024-03-28 20:40:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建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的方法吗?在


Tags: 模块文件方法代码脚本apiincludeunit
1条回答
网友
1楼 · 发布于 2024-03-28 20:40:59
<> > {{CD1>}的C++对应项是指针。当compUnit被Python垃圾回收时,它只是垃圾收集指针。它不会自动调用指针上的delete。在

你有几个我能想到的选择。在

  1. 向Python返回一个对象,该对象是指针的包装器。当对象被垃圾回收时,将调用其析构函数。添加必要的代码来删除包装器析构函数中的C++对象。

  2. 在swig接口文件中添加一个显式函数来删除对象。确保在Python对象的范围结束之前调用Python中的函数。

相关问题 更多 >