在Swig接口文件中未调用C ++析构函数

时间:2018-10-02 17:53:57

标签: python c++ swig

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

1 个答案:

答案 0 :(得分:0)

compUnit的C ++对应物是一个指针。当compUnit被Python垃圾回收时,它只是垃圾回收指针。它不会自动在指针上调用delete

您有几种选择,我能想到。

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

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