SWIG\u NewPointerObj的最后一个参数是什么意思?

2024-05-14 20:35:45 发布

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

我有一个使用SWIG访问C++库的兼容性库。我会发现,在这个层中创建一个Sug环绕的Python对象是有用的(与接受C++对象作为参数或返回一个参数相反)。即,我希望指向SWIG包的C++对象的^ {< CD1> }。在

我发现SWIG_NewPointerObj函数正是这样做的。SWIG生成的xx_wrap.cpp文件使用此函数,但它也可以在swig -python -external-runtime swigpyrun.h发出的头文件中使用

但是,我找不到这个函数的最后一个参数是什么的任何引用。它似乎指定了对象的所有权,但没有文档说明每个选项的含义(甚至它们都是什么)。 以下是可接受的值:

  • 0
  • 刷卡指针
  • 刷卡指针
  • SWIG_POINTER_NEW=自有+无阴影
  • SWIG_POINTER_不支持(我不确定SWIG\u NewPointerObj是否接受这个)
  • SWIG_POINTER_IMPLICIT_CONV(我不确定SWIG_NewPointerObj是否接受这个)

我想创建一个只在包装层中使用的对象。我想用我自己的C++对象来创建它(这样我就可以改变C++对象的值,并将它反映在Python对象中。我需要它以便可以将它传递给Python回调函数。我希望在程序的整个生命周期中保留这个实例,这样就不会浪费时间为每个回调创建/销毁相同的对象。哪个选项是合适的,我该怎么做?在


Tags: 对象函数参数选项swig指向xx指针
1条回答
网友
1楼 · 发布于 2024-05-14 20:35:45

使用SWIG_NewPointerObj创建新指针对象时,可以传递以下标志:

SWIG_POINTER_OWN
SWIG_POINTER_NOSHADOW

如果设置SigigPoTythOnLoad,则当Python指针被终结时,底层C++类的析构函数将被调用。默认情况下,不会调用析构函数。见Memory Management

对于您的用例,您根本不需要设置任何标志。在

从源代码中可以看到,如果设置了SWIG_POINTER_NOSHADOW,则返回一个基本的包装指针。您将无法访问Python中的成员变量。你只有一个不透明的指针。在

参考:/usr/share/swig/2.0.7/python/斯威伦在

相关问题 更多 >

    热门问题