哪些 swig 函数需要 %newObject 来避免 Python 中的内存泄漏



如果我们返回由没有标志的SWIG_NewObjectPtr创建的值,它的引用计数将为1,并且永远不会被垃圾回收。为了避免这种情况,我必须在 .i 文件中使用 %newobject。

但是,有相当多的 swig 原语可用于使值返回到 python 中。我怀疑其中一些也应该注释为 %newobject。

是否有列表或应该盲目注释所有返回任何内容的函数到python中? 有没有办法全局或按文件应用 %newobject?

对于SWIG_NewPointerObj,如果需要,Python 会跟踪引用。 设置own标志。 如果该返回值未分配给变量,则其引用计数将递减。%newobject不适用于 Python 对象。

%newobject用于指示函数返回未计数的 C/C++ 分配对象,例如return new char[50];return (char*)malloc(1000);。 在前面的示例中,SWIG 将通过复制数据创建一个 Python 字符串,但不知道在没有%newobject的情况下释放返回的指针。 如果 SWIG 还没有该类型的%typemap(newfree),则可能还需要编写一个 。

引用:

  • 11.3.3 使用 %newobject 释放内存
  • 14.2 对象所有权和 %newobject

最新更新