我正在使用swig和python来调用用C ++编写的函数myfunc()。每当我调用myfunc()时,我都必须生成相同的庞大稀疏矩阵。我想要做的是创建矩阵一次,然后将矩阵的指针传递给python,而不是每次都重新分配空间。我担心的是,这可能会导致某种内存泄漏。
最好的方法是什么?
矩阵是Eigen :: SparseMatrix的一部分。
简单地来回传递一个指针是否可以省事? Python不知道如何处理它,但只要空间保持分配,我能否在C ++中重用指针?
答案 0 :(得分:1)
这正是swig处理未知对象的方式:它传递一个指向周围对象的指针,以及一些类型信息(一个字符串)。如果函数将该类型的指针作为参数,swig将很乐意将该指针传递给它。请参阅swig docs here。
你只需要确保类型匹配,即你不能将MatrixXd*
传递给python并在使用MatrixBase<MatrixXd>*
的函数中使用它,因为swig不会知道类型兼容。
此外,对于未知对象(至少指向此类指针),swig不会进行任何内存管理,因此您需要在C ++端分配和取消分配对象。