如果我们返回由没有标志的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