Swig - 存储未知对象,直到下一次调用C ++函数

时间:2015-11-24 11:24:59

标签: python c++ swig

我正在使用swig和python来调用用C ++编写的函数myfunc()。每当我调用myfunc()时,我都必须生成相同的庞大稀疏矩阵。我想要做的是创建矩阵一次,然后将矩阵的指针传递给python,而不是每次都重新分配空间。我担心的是,这可能会导致某种内存泄漏。

最好的方法是什么?

矩阵是Eigen :: SparseMatrix的一部分。

简单地来回传递一个指针是否可以省事? Python不知道如何处理它,但只要空间保持分配,我能否在C ++中重用指针?

1 个答案:

答案 0 :(得分:1)

这正是swig处理未知对象的方式:它传递一个指向周围对象的指针,以及一些类型信息(一个字符串)。如果函数将该类型的指针作为参数,swig将很乐意将该指针传递给它。请参阅swig docs here

你只需要确保类型匹配,即你不能将MatrixXd*传递给python并在使用MatrixBase<MatrixXd>*的函数中使用它,因为swig不会知道类型兼容。

此外,对于未知对象(至少指向此类指针),swig不会进行任何内存管理,因此您需要在C ++端分配和取消分配对象。