我有一个使用SWIG访问C++库的兼容性库。我会发现,在这个层中创建一个Sug环绕的Python对象是有用的(与接受C++对象作为参数或返回一个参数相反)。即,我希望指向SWIG包的C++对象的^ {< CD1> }。在
我发现SWIG_NewPointerObj
函数正是这样做的。SWIG生成的xx_wrap.cpp
文件使用此函数,但它也可以在swig -python -external-runtime swigpyrun.h
发出的头文件中使用
但是,我找不到这个函数的最后一个参数是什么的任何引用。它似乎指定了对象的所有权,但没有文档说明每个选项的含义(甚至它们都是什么)。 以下是可接受的值:
我想创建一个只在包装层中使用的对象。我想用我自己的C++对象来创建它(这样我就可以改变C++对象的值,并将它反映在Python对象中。我需要它以便可以将它传递给Python回调函数。我希望在程序的整个生命周期中保留这个实例,这样就不会浪费时间为每个回调创建/销毁相同的对象。哪个选项是合适的,我该怎么做?在
使用
SWIG_NewPointerObj
创建新指针对象时,可以传递以下标志:如果设置SigigPoTythOnLoad,则当Python指针被终结时,底层C++类的析构函数将被调用。默认情况下,不会调用析构函数。见Memory Management
对于您的用例,您根本不需要设置任何标志。在
从源代码中可以看到,如果设置了SWIG_POINTER_NOSHADOW,则返回一个基本的包装指针。您将无法访问Python中的成员变量。你只有一个不透明的指针。在
参考:/usr/share/swig/2.0.7/python/斯威伦在
相关问题 更多 >
编程相关推荐