簡體   English   中英

swig 接口文件中未調用 C++ 析構函數

[英]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

你有幾個我能想到的選擇。

  1. 將一個對象返回給 Python,該對象是指針的包裝器。 當對象被垃圾回收時,它的析構函數將被調用。 在包裝器的析構函數中添加必要的代碼以刪除 C++ 對象。

  2. 在 swig 接口文件中添加顯式函數刪除對象。 確保在 Python 對象的范圍結束之前在 Python 中調用該函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM